社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  Python

没有in的python列表理解

kk96kk • 5 年前 • 913 次点击  

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

['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
 
913 次点击  
文章 [ 4 ]  |  最新文章 5 年前
ShadowRanger
Reply   •   1 楼
ShadowRanger    5 年前

让我们把它分成几行:

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    5 年前

[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_    5 年前

计数器将返回类似字典的结构。所以需要迭代键和值,键是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    5 年前

所以这里的语法有点混乱,但是实际发生的是 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)]