2017-04-15 51 views
0

这里,我已经从列表打印常见项一些代码,并设定()。 我没有得到什么结果变量的说法。打印常见的项目,并设定()

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] 
+0

它打印的普通物品。我没有看到一个问题 –

回答

0

最后一行执行在列表解析的ab值之间的交叉点。只有pooly执行:

首先,我不明白为什么转aset。对整数采样range总是提供不同的值。在这种情况下,它不会加快处理速度,只会随着顺序(已经是随机的...)而混乱。

然后,if i in b是无效的(不显着,如果有只有几个值),因为线性搜索(b是一个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] 

甚至更好的使用setintersection方法。

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

在这两个重写,我们创建一个set,要能够使用快速查找/交叉点与其他迭代。

0

这就是所谓的名单理解,基本上是做你的阵列,或字典里面经常循环。

初学Python程序员一个更可读的代码如下:

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

您正在寻找到list(a)只保留那些谁在这两个list(a)list(b)

+0

多少可读?这只是写它的另一种方式。列表理解_is_可读。 –

+0

可读初学者,不是有人熟悉Python语法 –

+0

列表理解是比经典的循环结构要快得多。更好地教育人们。 –