如何在Python中做一个特殊的区别? [关闭]

最后发布: 2014-10-25 02:45:59


问题

我在Python中有一个列表,其中包含

['A,1,2,2,4','B,1,3,2,4','C,1,2,3,4']

我如何获得以下输出:

['A,2,2']
['B,3,2']
['C,2,3']

但是,同一行代码应该能够对变量列表执行相同的操作,例如:

['A,4,2,1,5',
 'B,3,2,1,5',
 'C,6,2,3,5',
 'D,1,2,3,5']

输出:

['A,4,1',
 'B,3,1',
 'C,6,3',
 'D,1,3']
python string list
回答

一个巧妙的方法得到的结果是使用operator.itemgetter基于字符串分割,像这样

>>> my_list = ['A,1,2,2,4','B,1,3,2,4','C,1,2,3,4']
>>> from operator import itemgetter
>>> [",".join(itemgetter(0, 2, 3)(items.split(","))) for items in my_list]
['A,2,2', 'B,3,2', 'C,2,3']

或形成一个生成器表达式,该表达式通过根据进行拆分来给出字符串,然后仅选择索引为0、2和3的元素,然后将所有元素与连接在一起,就像这样

>>> [",".join([j[0], j[2], j[3]]) for j in (d.split(",") for d in my_list)]
['A,2,2', 'B,3,2', 'C,2,3']

在这里, (d.split(",") for d in my_list)称为生成器表达式 ,该表达式在每次迭代中给出基于,拆分的字符串的新列表。


回答

我不确定这是什么动机/您需要代码的通用性如何。 这适用于您的特定实例:

[[seq[:2] + seq[4:7]] for seq in ['A,1,2,2,4','B,1,3,2,4','C,1,2,3,4']]

本质上,这会将需要的子字符串映射到数组中的每个字符串。 不知道您要达到的目标就很难说更多。