全面的 `for...in` 不同于标准循环
Comprehensive `for...in` different from standard loops
我们得到以下两个随机数列表:
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
)正是我想要的,但我更喜欢后一种方法,因为我有更多的方法并且我想避免一直编写内部循环。
第二个结果不同,因为您定义了另一个偶尔为空的列表。
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)
对于计算交集、并集等,set
s 是最佳选择:
>>> list(set(first) & set(second))
[9, 7]
我们得到以下两个随机数列表:
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]
我想通过
条件下的综合作业使它更像 Pythoniccomprehension = [[first_element for second_element in second if
first_element == second_element] for first_element
in first]
print comprehension
-------------------
[[], [7], [], [9], []]
两个结果不同(最后一个也显示不匹配的结果),所以我猜这两个作业是有区别的。前者(使用标准 for...for...if
)正是我想要的,但我更喜欢后一种方法,因为我有更多的方法并且我想避免一直编写内部循环。
第二个结果不同,因为您定义了另一个偶尔为空的列表。
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)
对于计算交集、并集等,set
s 是最佳选择:
>>> list(set(first) & set(second))
[9, 7]