从列表中打印公共项目,以及set()

时间:2017-04-15 16:19:35

标签: python python-2.7

这里我有一些代码来自列表中的Print common项和set()。 我没有得到结果变量的说法。

import random
a = random.sample(range(1,30), 12)
b = random.sample(range(1,30), 16)
result = [i for i in set(a) if i in b]

以下行的含义是什么?请解释我是编程新手。

[i for i in set(a) if i in b] 

2 个答案:

答案 0 :(得分:0)

最后一行在列表推导中执行ab值之间的交集。只有pooly执行:

首先,我不明白为什么将a转变为set。对range整数进行采样始终提供不同的值。在这种情况下,它不会加快处理速度,它只是与订单混淆(已经是随机的......)。

然后,由于线性搜索(if i in bb

list效率低(如果只有几个值,则不明显)

我会像这样重写它:

a = random.sample(range(1,30), 12)
b = set(random.sample(range(1,30), 16))
result = [i for i in a if i in b]

甚至更好地使用set intersection方法。

result = set(random.sample(range(1,30), 12)).intersection(random.sample(range(1,30), 16))

在两次重写中,我们创建一个set,以便能够使用与另一个可迭代的快速查找/交集。

答案 1 :(得分:0)

它被称为列表理解,它基本上在数组或字典中进行常规循环。

初学者python程序员的可读代码将是:

results = []
for i in set(a):
    if i in b:
        results.append(i)

您正在查看list(a)并仅保留同时位于list(a)list(b)的人。