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

Python 如何从以某些字符开头的数组中删除某些元素?,python,arrays,string,for-loop,remove,Python,Arrays,String,For Loop,Remove,我有一个表达式列表,在一个称为文本的数组中: literals=['-PacketAt(A)'、+CarAt(B)'、'-CarAt(A)'、'-packeteinto(B)'、+CarAt(A)'、'LoadA'、'+PacketAt(A)'、'+packeteinto(B)'、'DriveAB'、'-CarAt(B)'、'DriveBA'、'ProduceA'、'DischargeA'、'DischargeA'、'DischargeB'. 我想删除数组中不以+和-符号开头的元素。为此,我写了

我有一个表达式列表,在一个称为
文本的数组中:

literals=['-PacketAt(A)'、+CarAt(B)'、'-CarAt(A)'、'-packeteinto(B)'、+CarAt(A)'、'LoadA'、'+PacketAt(A)'、'+packeteinto(B)'、'DriveAB'、'-CarAt(B)'、'DriveBA'、'ProduceA'、'DischargeA'、'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 = ['-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来运行它:。

我将使用一个列表:

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)

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

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

 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)']

我已经更新了下面的帖子,以显示实际的期望输出!不幸的是,在尝试这种理解时,我得到了以下输出:
['-packetenvo'、'LoadA'、'LoadB'、'DriveAB'、'DriveBA'、'ProduceA'、'DischargeA'、'DischargeB']
嗨,谢谢你的回答!为了更加清晰,我用期望的输出更新了我的原始问题。我只想要开头有
+
-
的字符串。