简化列表理解中的表达

时间:2016-04-05 09:25:38

标签: python python-2.7 list-comprehension

我正在尝试生成一个字符串列表,我正在寻找一个简单的表达式,但无法找到。

我有什么:

aScanListNames = ["AIN0", "AIN1", "AIN2", "AIN3"]
[[chan+"_NEGATIVE_CH", chan+"_RANGE", chan+"_RESOLUTION_INDEX", chan+"_EF_CONFIG_D", chan+"_EF_CONFIG_E"] for chan in aScanListNames]

给予:

[['AIN0_NEGATIVE_CH',   'AIN0_RANGE',   'AIN0_RESOLUTION_INDEX',   'AIN0_EF_CONFIG_D',   'AIN0_EF_CONFIG_E'],  ['AIN1_NEGATIVE_CH',   'AIN1_RANGE',   'AIN1_RESOLUTION_INDEX',   'AIN1_EF_CONFIG_D',   'AIN1_EF_CONFIG_E'],  ['AIN2_NEGATIVE_CH',   'AIN2_RANGE',   'AIN2_RESOLUTION_INDEX',   'AIN2_EF_CONFIG_D',   'AIN2_EF_CONFIG_E'],  ['AIN3_NEGATIVE_CH',   'AIN3_RANGE',   'AIN3_RESOLUTION_INDEX',   'AIN3_EF_CONFIG_D',   'AIN3_EF_CONFIG_E']]

正如预期的那样,列表是一个列表。我想获得一个简单的列表,如下:

['AIN0_NEGATIVE_CH','AIN0_RANGE','AIN0_RESOLUTION_INDEX','AIN0_EF_CONFIG_D','AIN0_EF_CONFIG_E','AIN1_NEGATIVE_CH','AIN1_RANGE','AIN1_RESOLUTION_INDEX','AIN1_EF_CONFIG_D','AIN1_EF_CONFIG_E','AIN2_NEGATIVE_CH','AIN2_RANGE','AIN2_RESOLUTION_INDEX','AIN2_EF_CONFIG_D','AIN2_EF_CONFIG_E','AIN3_NEGATIVE_CH','AIN3_RANGE','AIN3_RESOLUTION_INDEX','AIN3_EF_CONFIG_D','AIN3_EF_CONFIG_E']

对于我的个人知识,我想知道是否有办法直接使用列表理解来获得这个? 如果没有,那么这样做的pythonic方式是什么?

编辑:我知道我可以压扁我的列表列表,但是我想知道是否有一个解决方案不涉及创建列表列表以便在之后展平它。

2 个答案:

答案 0 :(得分:3)

几乎那里。无需itertools

aScanListNames = ["AIN0", "AIN1", "AIN2", "AIN3"]
suffixes = ["_NEGATIVE_CH", "_RANGE", "_RESOLUTION_INDEX", "_EF_CONFIG_D", "_EF_CONFIG_E"]
result = [name+suffix for name in aScanListNames for suffix in suffixes]

答案 1 :(得分:0)

我想说这个单线程足够直观:

import itertools

aScanListNames = ["AIN0", "AIN1", "AIN2", "AIN3"]
suffixes = ["_NEGATIVE_CH", "_RANGE", "_RESOLUTION_INDEX", "_EF_CONFIG_D", "_EF_CONFIG_E"]

[i[0] + i[1] for i in itertools.product(aScanListNames, suffixes)]

输出:

['AIN0_NEGATIVE_CH', 'AIN0_RANGE', 'AIN0_RESOLUTION_INDEX', 'AIN0_EF_CONFIG_D', 'AIN0_EF_CONFIG_E', 'AIN1_NEGATIVE_CH', 'AIN1_RANGE', 'AIN1_RESOLUTION_INDEX', 'AIN1_EF_CONFIG_D', 'AIN1_EF_CONFIG_E', 'AIN2_NEGATIVE_CH', 'AIN2_RANGE', 'AIN2_RESOLUTION_INDEX', 'AIN2_EF_CONFIG_D', 'AIN2_EF_CONFIG_E', 'AIN3_NEGATIVE_CH', 'AIN3_RANGE', 'AIN3_RESOLUTION_INDEX', 'AIN3_EF_CONFIG_D', 'AIN3_EF_CONFIG_E']

如果你真的想要一个单行,你当然可以提供suffixes列表内联,但那只是凌乱。