2016-04-05 25 views
1

Dizelerin bir listesini oluşturmaya çalışıyorum ve bunu yapmak için basit bir ifade arıyorum.Liste anlaşılırken ifadeyi basitleştirin

Ben Ne:

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] 

verir:

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

olan beklendiği gibi listelerin listesi. Böyle basit bir listesini elde etmek istiyorum:

benim personel bilgi için
['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'] 

, bu doğrudan kullanarak liste anlama elde etmek var ise bir yolunu öğrenmek istiyorum? Değilse, bunu yapmak için pythonik bir yol ne olurdu?

DÜZENLEME: Liste listemizi düzleştirebileceğimi biliyorum, ancak sonradan düzleştirmek için bir liste listesi oluşturmayla ilgili olmayan bir çözüm olup olmadığını bilmek istiyorum.

+2

gerek yok ben pythonic yolu ** ** tek bir kod satırında her şeyi koymak denemek için olmadığını söyleyebilirim. Zaten biraz dağınık ve tek bir hatta koyarak onu daha da kötüleştirmene gerek yok. – 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 Bu listeyi gerekli verecektir ] another_list j, aScanListNames for i in + j. –

cevap

3

neredeyse adresinde bulunuyorsunuz. 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

Bu tek satırlık yeterince sezgisel olduğunu söyleyebilirim:

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

Çıktı:

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

Eğer gerçekten elbette suffixes liste satır içi sağlayabilir tek astar istiyorsanız, ama bu sadece dağınık.