我有以下结构
list1 = ["ab","ac","cd","de","fh","abcc","abcdef"]
list2 = ["acebfh"]
comprehension = [item for item in list1
if list(list2).count(i) < list(item).count(i)
for i in set(list2)]
但返回:
我在作业之前被引用
有没有办法用列表理解来做到这一点?
答案 0 :(得分:2)
列表推导的编写顺序与嵌套的完全指定的对应项相同,因此请解压缩。你写的内容基本上转化为:
for item in list1:
if list(list2).count(i) < list(item).count(i):
for i in set(list2):
list.append(item)
请注意,在for循环中定义之前,我们在if语句中引用了i。
如果你想要的是相当于:
for item in list1:
for i in set(list2):
if list(list2).count(i) < list(item).count(i):
list.append(item)
然后您可以将列表理解编写为:
comprehension = [item for item in list1
for i in set(list2)
if list(list2).count(i) < list(item).count(i)]
答案 1 :(得分:0)
嵌套循环的列表理解与您可能期望的相反。您正在尝试执行类似
的操作[i for i in range(j) for j in range(10)]
而你应该做像
这样的事情[i for j in range(10) for i in range(j)]
换句话说,&#34;内部&#34;循环位于外部循环之后,而内部循环(和条件)首先出现。