繁体   English   中英

如何从以某些字符开头的数组中删除某些元素?

[英]How to remove certain elements from an array that start with certain characters?

我有一个表达式列表,位于一个称为literals的数组中:

literals = ['-PacketAt(A)', '+CarAt(B)', '-CarAt(A)', '-PacketInCar', '+PacketAt(B)', '+CarAt(A)', 'LoadA', '+PacketAt(A)', '+PacketInCar', 'LoadB', '-PacketAt(B)', 'DriveAB', '-CarAt(B)', 'DriveBA', 'ProduceA', 'DischargeA', 'DischargeB']

我想删除不以+-符号开头的数组元素。

我写了以下内容来尝试这样做:

for literal in literals:
  if not (literal.startswith('-')) and not (literal.startswith('+')):
    literals.remove(literal)

但是,在运行此 for 循环后,我收到以下输出:

literals = ['-PacketAt(A)', '+CarAt(B)', '-CarAt(A)', '-PacketInCar', '+PacketAt(B)', '+CarAt(A)', '+PacketAt(A)', '+PacketInCar', '-PacketAt(B)', '-CarAt(B)', 'ProduceA', 'DischargeB']

所需的输出是:

literals = ['-PacketAt(A)', '+CarAt(B)', '-CarAt(A)', ' -PacketInCar', '+PacketAt(B)',
'+CarAt(A)', '+PacketAt(A)', '+PacketInCar', '-PacketAt(B)', 'DriveAB', '-CarAt(B)']

由此, 'ProduceA''DischargeB'不应该在被称为literals的列表中,但它们在。 为什么会这样,我如何修改我的代码以使它们不出现? 这是我提供的一些可运行的测试代码:

literals = ['-PacketAt(A)', '+CarAt(B)', '-CarAt(A)', ' -PacketInCar', '+PacketAt(B)',
'+CarAt(A)', 'LoadA', '+PacketAt(A)', '+PacketInCar', 'LoadB', '-PacketAt(B)', 'DriveAB', '-CarAt(B)', 'DriveBA', 'ProduceA', 'DischargeA', 'DischargeB']

for literal in literals:
    if not (literal.startswith('-')) and not (literal.startswith('+')):
        literals.remove(literal)
        
print(literals)

以及运行它的在线 Python IDE: https : //www.programiz.com/python-programming/online-compiler/

您遇到的问题是您试图在迭代列表时从列表中删除元素。 尽量避免这种情况。

您可以使用列表理解来获得结果:

 literals = ['-PacketAt(A)', '+CarAt(B)', '-CarAt(A)', ' -PacketInCar', '+PacketAt(B)', '+CarAt(A)', 'LoadA', '+PacketAt(A)', '+PacketInCar', 'LoadB', '-PacketAt(B)', 'DriveAB', '-CarAt(B)', 'DriveBA', 'ProduceA', 'DischargeA', 'DischargeB']
 lst  = [x for x in literals if x[0] in ['-','+']]
 print(lst)

输出

['-PacketAt(A)', '+CarAt(B)', '-CarAt(A)', '-PacketInCar', '+PacketAt(B)', '+CarAt(A)', '+PacketAt(A)', '+PacketInCar', '-PacketAt(B)', '-CarAt(B)']

我将使用列表理解:

literals = ['-PacketAt(A)', '+CarAt(B)', '-CarAt(A)', '-PacketInCar', '+PacketAt(B)', '+CarAt(A)', 'LoadA', '+PacketAt(A)', '+PacketInCar', 'LoadB', '-PacketAt(B)', 'DriveAB', '-CarAt(B)', 'DriveBA', 'ProduceA', 'DischargeA', 'DischargeB']
literals = [x for x in literals if not x.startswith(('-','+'))]
print(literals)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM