2016-04-05 3 views
1

Я пытаюсь сгенерировать список строк, и я ищу простое выражение для этого, но не могу узнать.упростить выражение в понимании списка

Что у меня есть:

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'] 

Для моего Personnal знаний, я хотел бы знать, если есть способ получить это непосредственно, используя список понимание? Если нет, то какой будет питонический способ сделать это?

EDIT: Я знаю, что могу сгладить список, но хочу знать, есть ли решение, не связанное с созданием списка списков, чтобы сгладить его после.

+2

Я бы сказал, что вещий путь ** не **, чтобы попытаться поставить все на одной строке кода. Это уже немного беспорядок, и вам не нужно его ухудшать, помещая его в одну строку. – skyking

+1

https://docs.python.org/dev/library/itertools.html#itertools.chain –

+1

aScanListNames = ["AIN0", "AIN1", "AIN2", "AIN3"] another_list = ["_NEGATIVE_CH", "_RANGE", "_RESOLUTION_INDEX", "_EF_CONFIG_D", "_EF_CONFIG_E"] required_list = [I + J для г в aScanListNames для J в another_list] Это даст вам требуется список. –

ответ

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] 
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 список инлайн, но это просто грязно.

Смежные вопросы