无法删除python列表中带有冒号的字符串项
因此,在用python编写代码时,我遇到了以下问题:我在这样的列表中有几个字符串项:无法删除python列表中带有冒号的字符串项,python,Python,因此,在用python编写代码时,我遇到了以下问题:我在这样的列表中有几个字符串项: ['X','Y','Z','A', 'B:C', 'D'] 我想删除所有过去的'Z'。我使用以下代码尝试此操作: for item in lines: if ((item == "A")): lines.remove(item) if (item == "B:C"): lines.remove(item) if (item == "D"): lines
['X','Y','Z','A', 'B:C', 'D']
我想删除所有过去的'Z'
。我使用以下代码尝试此操作:
for item in lines:
if ((item == "A")):
lines.remove(item)
if (item == "B:C"):
lines.remove(item)
if (item == "D"):
lines.remove(item)
A
和D
被完美移除。但是,B:C
不会被删除并保留在列表中
请注意,A、D、B:C
等表示字符串,而不是字符(例如,A
可能是事务失败!
和B:C
可能表示写入失败:无法完成!
)
如何解决这个问题?您可以使用
.index()
方法查找列表中特定元素的索引
然后,在找到z_索引之后,您可以通过切片第一个列表来创建另一个列表
下面是一个例子:
l1 = ['X','Y','Z','A', 'B:C', 'D']
#finding index of element 'Z'
z_index = l1.index('Z')
#slicing list from 0 until z_index
l2 = l1[:z_index]
print l2
输出:
['X', 'Y']
您可以使用.index()
方法查找列表中特定元素的索引
然后,在找到z_索引之后,您可以通过切片第一个列表来创建另一个列表
下面是一个例子:
l1 = ['X','Y','Z','A', 'B:C', 'D']
#finding index of element 'Z'
z_index = l1.index('Z')
#slicing list from 0 until z_index
l2 = l1[:z_index]
print l2
输出:
['X', 'Y']
在迭代时修改列表通常是一件坏事。删除当前元素时,会跳过某些元素。您可以通过迭代反向(行)
来修复它,但最好创建一个没有要删除的元素的新列表:
to_remove = {'A', 'B:C', 'D'}
new_lines = [line for line in lines if line not in to_remove]
或者,如果要就地修改:
to_remove = {'A', 'B:C', 'D'}
lines[:] = [line for line in lines if line not in to_remove]
在迭代时修改列表通常是一件坏事。删除当前元素时,会跳过某些元素。您可以通过迭代反向(行)
来修复它,但最好创建一个没有要删除的元素的新列表:
to_remove = {'A', 'B:C', 'D'}
new_lines = [line for line in lines if line not in to_remove]
或者,如果要就地修改:
to_remove = {'A', 'B:C', 'D'}
lines[:] = [line for line in lines if line not in to_remove]
通常,从正在迭代的列表中删除元素不是一个好主意。在你的情况下,你可以考虑用你想要的结果创建一个新的列表:
l = ['X','Y','Z','A', 'B:C', 'D']
clean_l = [i for i in l if i not in ('A', 'B:C', 'D')]
如果知道要删除哪些元素,这是一个很好的选择。但是,如果您知道在“Z”之后不需要任何内容,而不管它们的值如何,则只需对列表进行切片:
clean_l = l[:l.index('Z') + 1]
通常,从正在迭代的列表中删除元素不是一个好主意。在你的情况下,你可以考虑用你想要的结果创建一个新的列表:
l = ['X','Y','Z','A', 'B:C', 'D']
clean_l = [i for i in l if i not in ('A', 'B:C', 'D')]
如果知道要删除哪些元素,这是一个很好的选择。但是,如果您知道在“Z”之后不需要任何内容,而不管它们的值如何,则只需对列表进行切片:
clean_l = l[:l.index('Z') + 1]
首先,您需要使用index()方法查找“Z”的位置
然后,要删除z之后的所有内容,我将执行以下操作:
del x[postion+1:]
您必须向该位置添加一个,否则它也会删除“Z”首先,您需要使用index()方法查找“Z”的位置
然后,要删除z之后的所有内容,我将执行以下操作:
del x[postion+1:]
您必须向位置添加一个,否则它也会删除“Z”切片如何<代码>行[:1+行.index('Z')]
您不应该在迭代列表时修改列表…可能是因为您正在迭代列表,并且一旦删除元素('A'
),它跳过了下一个?我不明白为什么你一开始就迭代它,因为你已经知道你要删除什么。切片呢<代码>行[:1+行.index('Z')]
您不应该在迭代列表时修改列表…可能是因为您正在迭代列表,并且一旦删除元素('A'
),它跳过了下一个?我不明白你为什么要首先迭代它,因为你已经知道要删除什么。所以我需要在删除它们之前先检查这些字符串。例如,我需要检查“事务失败!”。所以迭代是不可避免的?如果你需要分割列表,这是正确的解决方案。如果出于某种原因对列表进行额外检查,则使用列表理解解决方案。如果要删除列表中的项目,则应避免迭代<代码>切片或使用条件语句创建一个新的
通常是一种更好的做法。因此,在删除这些字符串之前,我需要先检查它们。例如,我需要检查“事务失败!”。所以迭代是不可避免的?如果你需要分割列表,这是正确的解决方案。如果出于某种原因对列表进行额外检查,则使用列表理解解决方案。如果要删除列表中的项目,则应避免迭代<代码>切片
或使用条件语句创建一个新的
通常是更好的做法。是p.index还是x.index?是p.index还是x.index?