Python中的列表理解结构

时间:2017-05-07 04:01:32

标签: python

我有以下结构

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)]

但返回:

  

我在作业之前被引用

有没有办法用列表理解来做到这一点?

2 个答案:

答案 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;循环位于外部循环之后,而内部循环(和条件)首先出现。