2017-06-28 34 views
-1

我有數據列表:創造了許多列表的循環

data_list = [[1,2,3], [4,5,6], [7,8,9], ...] 

我想每個元素分配給一個單獨的列表,以便:

Bin1 = [1,2,3] 
Bin2 = [4,5,6] 
.... 
Bin100 = [..,..,..] 

我不知道怎麼樣要做到這一點,而不是做手動的方式初始化列表1 1.試圖尋找一個功能如何去做,但沒有發現任何東西。

一旦我有列表初始化,我需要將數據從DATA_LIST追加:

for i in range(0, len(data_list)): 
    bin1.append(data_list[i][1]) 
    bin2.append(data_list[i][2]) 
    ....... 

再次,這樣做的快捷方式會這麼有用!

+1

你已經有了列表...在列表中!根本沒有必要這樣做。 'data_list [0]'基本上是'Bin1'(方括號中的不同值會給你不同的bin) – byxor

回答

1

可以簡單的寫下面的代碼

l = [ [i,i+1,i+2] for i in range(1,YOUR_MAX_LENGTH,3) ] 

希望這有助於

+1

請注意1個字母的變量名。 'l'看起來像'I'和'1'和'|'。怎麼樣'my_list'什麼的(因爲我們真的不知道它代表什麼)? – byxor

+0

耶@byxor,我只是舉了一個例子。順便說一句好評。 :) –

3

你可以使用字典,如果你想與一鍵訪問列表類似"Bin1"

data_list = [[1,2,3], [4,5,6], [7,8,9]] 

d = {} 
for i, v in enumerate(data_list, 1): 
    d['Bin{}'.format(i)] = v 

print(d) # >>> {'Bin1': [1, 2, 3], 'Bin3': [7, 8, 9], 'Bin2': [4, 5, 6]} 

print(d['Bin1']) # >>> [1, 2, 3] 

或者使用詞典理解:

d = {'Bin{}'.format(i): v for i,v in enumerate(data_list, 1)} 
+1

'枚舉(data_list,1)'? – AChampion

+0

@AChampion好電話!我會更新我的答案。 – LeopoldVonBuschLight

1

使用字典理解,使列表的字典,請注意這使得副本:

data_list = [[1,2,3], [4,5,6], [7,8,9]] 

# To make copies 
separate_lists = {'bin'+str(i): sublist 
        for i,sublist in enumerate(data_list,1)} 

print (separate_lists) 

爲了不復印一本字典,這應該工作:

# To remove sublists from data_list and put them in the dictionary 
separate_lists_not_copied = {} 
for i in range(1,len(data_list)+1): 
    separate_lists_not_copied['bin'+str(i)] = data_list.pop(0) 

print (separate_lists_not_copied) 

兩個打印:

{'bin3': [7, 8, 9], 'bin1': [1, 2, 3], 'bin2': [4, 5, 6]} 
+1

輕微 - 您可以讓'enumerate()'從'1'開始以避免'str(i + 1)'中的'+ 1',例如'枚舉(data_list,1)',然後只是'str(i)' – AChampion

+0

@AChampion謝謝你的朋友 – citizen2077

+0

@AChampion我每天在這裏學習新東西:> – citizen2077

0

使用locals()即時創建變量名並遍歷所有子列表。

對於那些誰不知道這個功能:

更新,並返回來表示當前本地符號表的字典。

當在函數 塊中調用自由變量時,由locals()返回,但不在類塊中。

data_list = [[1,2,3], [4,5,6], [7,8,9]] 

for i, sublist in enumerate(data_list, 1): 
    locals()['bin_{}'.format(i)] = sublist 

print bin_1 # [1, 2, 3] 
print bin_3 # [7,8,9] 

注意:因爲它是通過約定使用對Python類不要在變量名中使用大寫。所以bin_1是一個比Bin1更好的名字