【问题标题】:python: create list from list returns less itemspython:从列表创建列表返回更少的项目
【发布时间】:2018-11-28 10:24:57
【问题描述】:

我有一个文件列表,我用它来创建:

files=[f for f in os.listdir(source) if f.endswith('.tif')]
print(len(files))
264

此列表包含 264 个文件,即

 ...,'NL-HnWFA_2244_157.tif', 'NL-HnWFA_2244_158-001.tif', 'NL-HnWFA_2244_158-002.tif', 'NL-HnWFA_2244_159.tif', ...

我想从这个文件列表中减去库存(“157”部分),方法是:

inventories = []
for file in files:
  inventories.append(file.split('_')[2].split('-')[0].split('.')[0])
print(len(inventories))  
264

那么我的列表中有 264 个项目
但是,如果我发出命令:

inventories = {fn.split('_')[2].split('-')[0].split('.')[0] for fn in files}
print(len(inventories))
263

双精度值已被省略,只有 263 项。

为什么在第二个语句中省略了双精度值?
我还能(以某种方式)在第一个语句中获得双精度值吗?

【问题讨论】:

  • 在第二个语句中,您通过将语句括在 {} 中来创建一个集合对象。使用 [] 来获取列表。

标签: python list for-loop double


【解决方案1】:

这是因为set(就像你正在做的{...}),总是使序列不重复值。

对此你无能为力。

所以你必须使用列表推导式。

演示:

>>> a=[1,2,3,3]
>>> set(a)
{1, 2, 3}
>>> {i for i in a}
{1, 2, 3}
>>> {*a}
{1, 2, 3}
>>> 

就像这个docs

集合是唯一元素的可变无序集合。常见用途包括成员资格测试、从序列中删除重复项以及计算集合上的标准数学运算,例如交集、并集、差集和对称差集。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-03-09
    • 2013-04-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-03-02
    • 2015-05-15
    相关资源
    最近更新 更多