【问题标题】:Delete element from a list if it occurs in another list如果元素出现在另一个列表中,则从列表中删除它
【发布时间】:2022-01-24 11:19:43
【问题描述】:

我不久前发布了我的问题,虽然我得到了答案,但我看到的一切仍然没有帮助......

所以我有两个列表,我希望如果 list1 中的一个元素存在于 list2 的元素中,则从 list2 中删除该元素,但直到现在我还没有找到如何实现这一点。

例如,我有这两个列表:

lst_1=["A","B","C"]
lst_2 = ["123A","564Z","Beee","CD152"]

所以我想检查 list_2 元素是否包含 list_1 元素,如果这样删除它!

因此,例如,我希望此输出用于 result_lst :

["564Z"] 

我试着这样做:

lst=["A","B","C"]

ma_var_lst = ["123A","564Z","Beee","CD152"]


for elem in ma_var_lst:
    for letter in lst:
        if letter in elem:
            print("element: "+elem)
            ma_var_lst.remove(elem)
print(ma_var_lst)

但它不起作用,因为删除元素后索引会移动......

如果有人可以帮忙! :) 谢谢!

【问题讨论】:

  • 你应该这样做:new_list = [word for word in ma_var_list if any(c in word for c in lst)]

标签: python list loops


【解决方案1】:

我试过了,这对我有用。

lst = ["A", "B", "C"]
    
    ma_var_lst = ["123A", "564Z", "Beee", "CD152"]
    
    for letter in lst:
        for elem in ma_var_lst:
            for x in elem:
                if letter == x:
                    print(elem)
                    ma_var_lst.remove(elem)
                    break
    
    
    print(ma_var_lst)

【讨论】:

  • for x in elem: if letter == x: 可以替换为 if x in elem: 所以它可以为第一个列表中的元素采用更复杂的结构!
【解决方案2】:

我也找到了一种使用索引的方法:

lst=["A","B","C"]
ma_var_lst = ["123A","564Z","Beee","CD152"]
indexes=[]

for elem in ma_var_lst:
    for letter in lst:
        if letter in elem:
            # get the index of the element
            index = ma_var_lst.index(elem)
            indexes.append(index)
            print("element: "+elem)
            #ma_var_lst.remove(elem)

for i in sorted(indexes, reverse=True):
    del ma_var_lst[i]
print(ma_var_lst)

【讨论】:

  • 别这样,你应该建立一个一个新列表
猜你喜欢
  • 2011-05-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-06-18
相关资源
最近更新 更多