Py学习  »  Python

没有in的python列表理解

kk96kk • 6 年前 • 1725 次点击  

如果 弗莱森 例如,只是字符串列表

['There','is','only','passion','and','piece','is','a','lie','lie','lie']

然后在下面两行

c = Counter(flattened)
vocab = [x for x, count in c.items() if count>=2]

零件[X代表X,…]是什么意思?同样,不应该 计数 像我想的那样是tuple类型,它是一个计数器项?为什么这部分 count>=2 工作?!

注: 我从调试中了解到,第一行将列表转换为计数器,第二行将删除少于两次的项。但我不能真正解释语法

Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/30406
 
1725 次点击  
文章 [ 4 ]  |  最新文章 6 年前
ShadowRanger
Reply   •   1 楼
ShadowRanger    6 年前

让我们把它分成几行:

vocab = [           # line0
         x          # line1
         for        # line2
         x, count   # line3
         in
         c.items()
         if
         count>=2]  # line7

tuple c.items() 由一个键组成, x (数的东西)和 count (看到该键的次数)。

在每个循环中,您可以想象下一个循环 元组 被提取,然后解包,这样就不需要在索引中使用单个值 0 1 ,您可以通过名字来引用它们; anontuple[0] 变成 X , anontuple[1] 变成 计数 .

这个 count>=2 行然后过滤结果;如果 计数 小于 2 ,我们停止处理此项目,并拉下一个项目。

平原 X 最左边是要生成的项;当过滤检查通过时,我们推送相应的 X 在结果中 list 未修改的

转换为常规循环时,将如下所示(与listcomp行匹配的行):

vocab = []                  # line0
for x, count in c.items():  # lines 2-5
    if count >= 2:          # lines 6-7
        vocab.append(x)     # line1

如果解包对您来说很困惑,您可以将其想象为:

vocab = []              # line0
for item in c.items():  # lines 2, 4 and 5
    x = item[0]         # line3
    count = item[1]     # line3
    if count >= 2:      # line 6-7
        vocab.append(x) # line1
Q. Holness
Reply   •   2 楼
Q. Holness    6 年前

[x for x, ...] 只是在使用 x 在某个数组上迭代时作为变量…

x, count 捕获作为迭代值的两个项 c.items() .

如果要打印以下结果: for _ in c.items(): print(_) 会打印出一个元组列表 (x, count) .

[x for x, count in c.items() if count > 2] 只是保存 X 在数组中使用 count 可作为过滤器使用。

mad_
Reply   •   3 楼
mad_    6 年前

计数器将返回类似字典的结构。所以需要迭代键和值,键是x,值是count。如果我们仔细观察 c.items()

c.items() #list of tuples with (key,value)

[('and', 1),
 ('a', 1),
 ('lie', 3),
 ('is', 2), # x->'is' ,count->2
 ('There', 1),
 ('only', 1),
 ('passion', 1),
 ('piece', 1)]

所以,如果您正在为一个元组迭代这个列表,那么有两个组件:一个单词和相关的计数。为了计数,你正在检查 count>=2 如果是,则返回列表组件中为x的键

wpercy
Reply   •   4 楼
wpercy    6 年前

所以这里的语法有点混乱,但是实际发生的是 c.items() 是包含单词及其计数的元组。

更明确的写作方式是:

vocab = [x for (x, count) in c.items() if x>=2]

但也可以这样做:

vocab = [x[0] for x in c.items() if x[1]>=2]

哪里 x 是元组。

也有助于了解 c 实际上看起来像。如果打印c,您会看到:

>>> print c
Counter({'lie': 3, 'is': 2, 'and': 1, 'a': 1, 'There': 1, 'only': 1, 'passion': 1, 'piece': 1})

C项()

>>> print c.items()
[('and', 1), ('a', 1), ('lie', 3), ('is', 2), ('There', 1), ('only', 1), ('passion', 1), ('piece', 1)]