首页 > 解决方案 > 字符串列表,想将它们分成两个列表

问题描述

我正在尝试拆分目录中的文件名字符串列表。文件是成对生成的。一个是原始的,第二个是修改的。所以列表看起来像:

files = ['data1', 'data2', 'data3', 'data1-m', 'data2-m', 'data3-m']

但这一切都被打乱了。
我想创建两个列表,其中索引彼此对应,如下所示:

original_files = ['data1','data2','data3']
modified_files = ['data1-m','data2-m','data3-m']

目前我有:

noised_files = [x for x in files if 'm' in x]
original_files = [x for x in files if not 'm' in x]

它确实拆分了列表,但它不是成对的,我想要:

>original_files[0] = 'data1'
>noised_files[0] = 'data1-m'

谢谢你。

标签: pythonlistlist-comprehension

解决方案


list-comprehensionstr.endswith()和一起使用sorted()

files = ['data3', 'data1', 'data2', 'data2-m', 'data3-m', 'data1-m']

files = sorted(files)
print([x for x in files if x.endswith('m')])
print([x for x in files if not x.endswith('m')])

编辑

也可以这样写:

noised_files = [x for x in files if x.endswith('m')]
original_files = [x for x in files if x not in noised_files]

print(original_files[0])                 # data1
print(noised_files[0])                   # data1-m

编辑 2

使用filter()

print(list(filter(lambda x: x.endswith('m'), files)))
print(list(filter(lambda x: not x.endswith('m'), files)))

输出

['data1-m', 'data2-m', 'data3-m']
['data1', 'data2', 'data3']

推荐阅读