【问题标题】:Iterate lists elements within two for loops迭代两个 for 循环中的列表元素
【发布时间】:2018-10-15 08:07:21
【问题描述】:

我有一个列表

A= ['loans', 'mercedez', 'bugatti', 'a4', 'trump', 'usa', '选举', '总统','银河','7s','佳能','macbook','beiber', “蜘蛛侠”、“奇迹”、“铁人”]

B=['loans','network','washington','trump','canon','london']

当我为了从B 获取不存在于 列表A

for i in A:
    for j in B:
        if j not in i:
            print (j)

它给出的循环循环为:-

network
washington
trump
canon
london
loans
network
washington
trump
canon
london
loans
network
washington
trump
canon
london
loans
network
washington
trump
canon
london
.......
.......
.......

为什么会这样?我只想归还

network
washington
london

【问题讨论】:

  • 在您的代码中,您正在检查 B 中的元素是否不在 A 中的元素内且不在 A 中

标签: python arrays python-3.x list


【解决方案1】:
for i in B:
    if i not in A:
        print (i)

【讨论】:

  • 您能否强调一下我到底做错了什么?
  • 例如循环四,你检查'trump'是否不在'loans'中,这是真的。您应该检查是否不在列表内,是否在一个元素的字符串内
【解决方案2】:

利用not in方法:

not_in_list = [b for b in B if b not in A]

for n in not_in_list:
    print(n)

为了更清楚起见,如果您的原始代码编写如下:

for b in B:
    unique = True
    for a in A:
        if b == a:
            unique = False
            break

    if unique == True:
        print(b)

【讨论】:

  • 回答您对@Remi 的回答的问题:无需遍历两个列表来查找另一个列表中不存在的元素。您只需遍历 B 一次并使用 b not in A
  • 我只在 B 列表上迭代,如果你用 for 迭代构建你的数组而不是在 for 循环中,它会改变吗?
  • 此外,我相信您的代码的意义在于,对于列表 A 中的每个元素,它都会在列表 B 中打印其所有补码。因此,您将在输出中有 x B 长度。跨度>
  • 不确定我是否在这里关注您的问题,但我的演示文稿只是for 循环的简写。他们都做同样的事情。所以,基本上遍历 B 中的所有元素并检查 b 是否在 A 中。
【解决方案3】:

使用set区别

print(set(B) - set(A))

【讨论】:

    【解决方案4】:

    试试这个,

    A = ['loans', 'mercedez', 'bugatti', 'a4', 'trump', 'usa', 'election', 'president', 'galaxy', '7s', 'canon', 'macbook', 'beiber', 'spiderman', 'marvels', 'ironmen']
    B = ['loans', 'network', 'washington', 'trump', 'canon', 'london']
    print('\n'.join([i for i in B if i not in A]))
    

    输出:

    network
    washington
    london
    

    【讨论】: