我们给出了以下两个随机数字列表:
import numpy as np
import random
random.seed(1)
first = random.sample(xrange(10), 5)
random.seed(2)
second = random.sample(xrange(10), 5)
print("first ="), first
print("second ="), second
-------------------------
first = [1, 7, 6, 9, 2]
second = [9, 8, 0, 7, 5]
我们希望使用逐行标准比较
来找到交叉点loop = []
for first_element in first:
for second_element in second:
if first_element == second_element:
loop.append(first_element)
print loop
----------
[7, 9]
我希望通过全面的任务来制作更多的Pythonic
comprehension = [[first_element for second_element in second if
first_element == second_element] for first_element
in first]
print comprehension
-------------------
[[], [7], [], [9], []]
两个结果不同(最后也显示了不匹配的结果),因此我猜两个作业有所不同。前者(使用标准for...for...if
)正是我想要的,但我想要后一种方法,因为我有更多的它们,我想避免一直写内部循环。
答案 0 :(得分:2)
第二个结果是不同的,因为你已经定义了另一个偶尔为空的列表。
comprehension = [
[first_element for second_element in second
if first_element == second_element] # a list with some number
# of first_elements in it
for first_element in first] # the outer list
相反,您应该使用平面列表理解并在最后添加过滤器。
result = [first_el for first_el in first
for second_el in second if first_el == second_el]
这可能更简单
result = [first_el for first_el in first if first_el in second]
first_el
中second
多次出现的角落情况除外。如果可以忽略这个角落的情况,那么最好的方法是:
result = set(first).intersection(second)
答案 1 :(得分:1)
为计算交叉点,工会等,set
是最佳选择:
>>> list(set(first) & set(second))
[9, 7]