我有一个创建文件的列表:
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值?
我仍然可以(以某种方式)在第一条语句中获得双精度值吗?
答案 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一样:
集合是唯一元素的可变无序集合。常见用途包括成员资格测试,从序列中删除重复项以及对诸如交集,并集,差分和对称差分之类的集合计算标准数学运算。