结合拆分功能和计数在Python中的出现

时间:2018-11-15 09:14:55

标签: python string list split

我创建一个具有以下内容的列表:

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

有时这会给出如下结果:

files=['file_1263_1-001.tif', 'file_1263_2-002.tif', 'file_1263_3-003.tif']

for f in files:
  l1 = f.split("_")
  print( l1[2].split("-") )

返回:

['1', '001.tif']
['2', '002.tif']
['3', '003.tif']

但有时我会得到以下结果:

files=['file_0563_74-001.tif', 'file_0563_74-002.tif', 'file_0563_74-003.tif']

for f in files:
  l1 = f.split("_")
  print( l1[2].split("-") )

返回:

['74', '001.tif']
['74', '002.tif']
['74', '003.tif']

我想创建一个流控制,如果第一列(例如74)具有相同的值,那么除了它包含不同的值(例如1、2、3)以外,还要进行其他操作。
我该怎么做?

2 个答案:

答案 0 :(得分:0)

您可以使用集合理解来提取唯一类型。然后使用if / else构造根据您是否只有一个这样的类型来应用逻辑。

files = ['file_1263_1-001.tif', 'file_1263_2-002.tif', 'file_1263_3-003.tif']

file_types = {fn.split('-')[0].rsplit('_')[-1] for fn in files}

if len(file_types) == 1:
    # do something
else:
    # do something else

答案 1 :(得分:0)

以这种方式执行:

files = [f.split('_')[2].split('-') for f in files]
files
Output: [['1', '001.tif'], ['2', '002.tif'], ['3', '003.tif']]

检查所有第一个元素是否相同。如果相同,则唯一元素的长度将为1

if len(set([x[1] for x in files])) == 1:  # checks first elements are same
    # do something
else:
    # do something