Python:从列表创建列表返回较少的项目

时间:2018-11-28 10:24:58

标签: python list for-loop double

我有一个创建文件的列表:

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个项目。

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

1 个答案:

答案 0 :(得分:4)

这是因为set(在执行{...}时)总是使序列的值不重复。

您无能为力。

所以您必须使用列表理解一。

演示:

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

与该docs一样:

  

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