从python列表中删除两个连续的元素
从列表中删除连续元素时出现问题。 例如,我有一份清单从python列表中删除两个连续的元素,python,list,Python,List,从列表中删除连续元素时出现问题。 例如,我有一份清单 ['aaaaa', '@someword', '@otherword','bbbb',...] 我想从列表中删除具有@char的元素 a = ['aaaaa', '@someword', '@otherword','bbbb'] for word in a: if '@' in word: print("found @ in word :" +word) a.remove(word) 输出为;仅找到
['aaaaa', '@someword', '@otherword','bbbb',...]
我想从列表中删除具有@char的元素
a = ['aaaaa', '@someword', '@otherword','bbbb']
for word in a:
if '@' in word:
print("found @ in word :" +word)
a.remove(word)
输出为;仅找到第一个元素,跳过了第二个元素
found @ in word :@someword
如果我在这个元素之间加上一些值
a = ['aaaaa', '@someword', 'qqqq', '@otherword','bbbb']
它抓住了其中的两个
found @ in word :@someword
found @ in word :@otherword
我调试代码,如果有连续的单词包括@char,删除函数跳过第二个,因为删除过程后索引的变化
如何删除这些单词?您可以使用列表理解根据条件筛选出元素:
>>> original = ['aaaaa', '@someword', '@otherword','bbbb']
>>> filtered = [item for item in original if '@' not in item]
>>> filtered
['aaaaa', 'bbbb']
或替换它们:
>>> replaced = [item if '@' not in item else '' for item in original]
>>> replaced
['aaaaa', '', '', 'bbbb']
有关更多信息,请参阅。希望有帮助 您可以使用列表理解根据条件筛选出元素:
>>> original = ['aaaaa', '@someword', '@otherword','bbbb']
>>> filtered = [item for item in original if '@' not in item]
>>> filtered
['aaaaa', 'bbbb']
或替换它们:
>>> replaced = [item if '@' not in item else '' for item in original]
>>> replaced
['aaaaa', '', '', 'bbbb']
有关更多信息,请参阅。希望有帮助 您不应更改正在迭代的列表,而应创建一个新列表:
b = [word for word in a if not '@' in word]
您不应更改正在迭代的列表,而应创建一个新列表:
b = [word for word in a if not '@' in word]
您需要将列表“a”添加到列表中。下面的代码可能会对您有所帮助
a = ['aaaaa', '@someword', '@otherword','bbbb']
for word in list(a):
if '@' in word:
print("found @ in word :" +word)
a.remove(word)
您需要将列表“a”添加到列表中。下面的代码可能会对您有所帮助
a = ['aaaaa', '@someword', '@otherword','bbbb']
for word in list(a):
if '@' in word:
print("found @ in word :" +word)
a.remove(word)
另一种方法是您可以使用用户过滤器
另一种方法是用户筛选不建议在循环列表时对列表元素进行变异
a = ['aaaaa', '@someword', '@otherword','bbbb']
for index,word in enumerate(a):
print(index, word)
if '@' in word:
a.remove(word)
print(a)
这个的输出是
(0, 'aaaaa')
(1, '@someword')
['aaaaa', '@otherword', 'bbbb']
(2, 'bbbb')
从这里你可以看到“@someword”被删除了,索引2中的元素不再是“@otherword”,而是现在的“bbbb”。因此不能删除“@otherword”
您给出的第二个示例有效,因为当您删除'@someword'时,索引2处的元素将变成'@otherword',因此可以在下一次迭代中删除它
(0, 'aaaaa')
(1, '@someword')
['aaaaa', 'qqqq', '@otherword', 'bbbb']
(2, '@otherword')
['aaaaa', 'qqqq', 'bbbb']
我建议您创建一个新列表,只存储其中不包含“@”的元素
a = ['aaaaa', '@someword', 'qqqq', '@otherword','bbbb']
new_list = [i for i in a if '@' not in i]
print(new_list) # ['aaaaa', 'qqqq', 'bbbb']
在循环列表时,不建议对列表的元素进行变异
a = ['aaaaa', '@someword', '@otherword','bbbb']
for index,word in enumerate(a):
print(index, word)
if '@' in word:
a.remove(word)
print(a)
这个的输出是
(0, 'aaaaa')
(1, '@someword')
['aaaaa', '@otherword', 'bbbb']
(2, 'bbbb')
从这里你可以看到“@someword”被删除了,索引2中的元素不再是“@otherword”,而是现在的“bbbb”。因此不能删除“@otherword”
您给出的第二个示例有效,因为当您删除'@someword'时,索引2处的元素将变成'@otherword',因此可以在下一次迭代中删除它
(0, 'aaaaa')
(1, '@someword')
['aaaaa', 'qqqq', '@otherword', 'bbbb']
(2, '@otherword')
['aaaaa', 'qqqq', 'bbbb']
我建议您创建一个新列表,只存储其中不包含“@”的元素
a = ['aaaaa', '@someword', 'qqqq', '@otherword','bbbb']
new_list = [i for i in a if '@' not in i]
print(new_list) # ['aaaaa', 'qqqq', 'bbbb']
这里的实际问题是,您正在编辑的列表中循环删除/添加项。这意味着,当您在第二个项目上删除项目2时,您将在下一次迭代中到达项目4
(0, 'aaaaa')
(1, '@someword')
['aaaaa', 'qqqq', '@otherword', 'bbbb']
(2, '@otherword')
['aaaaa', 'qqqq', 'bbbb']
解决方案是在列表的副本上循环,或者创建一个列表副本,然后使用列表理解返回该副本
可以使用word[:]创建列表的副本
这里的实际问题是,您正在编辑的列表中循环删除/添加项。这意味着,当您在第二个项目上删除项目2时,您将在下一次迭代中到达项目4
(0, 'aaaaa')
(1, '@someword')
['aaaaa', 'qqqq', '@otherword', 'bbbb']
(2, '@otherword')
['aaaaa', 'qqqq', 'bbbb']
解决方案是在列表的副本上循环,或者创建一个列表副本,然后使用列表理解返回该副本
可以使用word[:]创建列表的副本
你不应该修改你正在迭代的列表,我该怎么做?它在c或java中工作,python列表的逻辑区别是什么?我实际上不知道区别是什么;我不是一个专业的程序员,只熟悉python。但我认为这在C或java中仍然不是一个好的实践。你可能永远不应该修改你正在迭代的列表。所以,我怎么做呢?它在C或java中工作,python列表的逻辑区别是什么?我实际上不知道区别是什么;我不是一个专业的程序员,只熟悉python。但我认为在C或Java语言中,这仍然不是一个好的实践