我希望首先从删除列表中循环搜索单词“ man”,然后是“ eater”。将这些单词与item_list中的字符串进行比较。如果匹配,则忽略它;如果不匹配,则追加到“ a”。
它应该忽略与“ man”和“ eater”匹配的任何单词。不知何故,我的输出应该忽略包含单词“ man”和“ eater”的字符串列表,但是不知何故,它只会不断循环删除中的第一个和第二个单词。例如,当它为“ man”循环单词时,它会正确删除与此单词匹配的字符串列表,但是当它为“ eater”单词循环时,它将再次从item_list(第二次)中查找,然后重新追加再次一组新的字符串。这使得一切都变得非常错误。
我的代码:
item = []
delete=["man", "eater"]
item_list = ['sharper_task|$none_venue|man', 'sharper_task|man_venue|king', 'sharper_task|king_venue|world', 'sharper_task|world_venue|dont', 'sharper_task|を_venue|eater', 'sharper_task|eater_venue|todo', 'sharper_task|todo_venue|,']
a = [[] for i in range(len(item_list))]
if delete is not None:
for dele in delete:
for ii, f in enumerate(item_list):
if dele not in f:
a[ii].append(f)
else:
a = [[nn] for nn in item_list]
item.append(a)
print(item)
当前输出:
[[['sharper_task|$none_venue|man'], ['sharper_task|man_venue|king'], ['sharper_task|king_venue|world', 'sharper_task|king_venue|world'], ['sharper_task|world_venue|dont', 'sharper_task|world_venue|dont'], ['sharper_task|を_venue|eater'], ['sharper_task|eater_venue|todo'], ['sharper_task|todo_venue|,', 'sharper_task|todo_venue|,']]]
预期输出:
['sharper_task|king_venue|world', 'sharper_task|world_venue|dont', 'sharper_task|todo_venue|,']
我认为这可能很难,但是如果可能的话,我希望坚持使用较短的代码,并且在此处不要包含太多的for循环。我仍在学习,发现在迭代列表时使用了太多for循环。
答案 0 :(得分:1)
您可以遍历item_list
并获取不包含delete
列表中任何元素的元素:
delete = ["man", "eater"]
item_list = ['sharper_task|$none_venue|man', 'sharper_task|man_venue|king', 'sharper_task|king_venue|world', 'sharper_task|world_venue|dont', 'sharper_task|を_venue|eater', 'sharper_task|eater_venue|todo', 'sharper_task|todo_venue|,']
print([x for x in item_list if not any(y in x for y in delete)])
# ['sharper_task|king_venue|world', 'sharper_task|world_venue|dont', 'sharper_task|todo_venue|,']
我不确定为什么需要重复输出,但是可以这样做:
print([[x, x] for x in item_list if not any(y in x for y in delete)])
为您提供预期的结果。
如果我们在其中检查的任何条件变为真,则 any(...)
返回True
,否则返回False
。这里,当True
中的任何元素位于delete
中时,我们需要返回一个item_list
。
非列表理解版本:
lst = []
for x in item_list:
if not any(y in x for y in delete):
lst.append([x, x])
print(lst)
答案 1 :(得分:1)
不确定,但是如果只想检查'|'
的一连串中是否有连续的东西(所以man|blah|foo
是,而man_blah|foo|bar
否):
print([i for i in item_list if not any(x in i.split('|') for x in delete)])
为您的确切输出:
l=[[i]*2 for i in item_list if not any(x in i for x in delete)]