2012-03-26 59 views
1

我有Python嵌套列表,我試圖組織並最終計算出現次數。嵌套列表看起來像:如何爲嵌套列表中的特定字符串創建子列表

[['22', '1'], ['21', '15'], ['11', '3'], ['31', '4'], ['41', '13'],...] 

首先我想要做的就是創建一個只包含「1」對應於第二項中嵌套列表子列表。我可以通過下面的命令來做到這一點:

Subbasin_1 = [] 
Subbasin_1.append([x for x in Subbasins_Imp if x[1] == '1']) 
print Subbasin_1 

給這些結果,這是正確的:

[['21', '1'], ['21', '1'], ['21', '1'], ['21', '1'], ['22', '1'],...] 

現在我想創建另一個子列表,這將使我所有的「21」 Subbasin_1的每個嵌套列表。當我使用同一行腳本,但更改適當的項目時,我得到一個空列表。不知道發生了什麼...?

OS_Count1 = [] 
OS_Count1.append([x for x in Subbasin_1 if x[0] == '21']) 
print OS_Count1 

結果是[[]] ???兩者有什麼區別? 感謝您的幫助...

回答

3

我不相信你的

[['21', '1'], ['21', '1'], ['21', '1'], ['21', '1'], ['22', '1'],...] 

線可以用你給的代碼生成。你Subbasin_1.append行追加列表爲空列表Subbasin_1,所以你應該得到類似

[[['22', '1'], ['21', '1']]] 

與嵌套的一個額外水平。

如果你避免空列表的不必要的建設+追加,你應該得到你想要的東西:

>>> Subbasins_Imp = [['22', '1'], ['21', '15'], ['11', '3'], ['31', '4'], ['41', '13'], ['21', '1']] 
>>> 
>>> Subbasin_1 = [x for x in Subbasins_Imp if x[1] == '1'] 
>>> print Subbasin_1 
[['22', '1'], ['21', '1']] 
>>> OS_Count1 = [x for x in Subbasin_1 if x[0] == '21'] 
>>> print OS_Count1 
[['21', '1']] 

或者,你可以簡單地取代後面追加延長。我不建議這樣做,但它可能會幫助你看到發生了什麼:

>>> Subbasins_Imp = [['22', '1'], ['21', '15'], ['11', '3'], ['31', '4'], ['41', '13'], ['21', '1']] 
>>> 
>>> Subbasin_1 = [] 
>>> Subbasin_1.extend([x for x in Subbasins_Imp if x[1] == '1']) 
>>> print Subbasin_1 
[['22', '1'], ['21', '1']] 
>>> 
>>> OS_Count1 = [] 
>>> OS_Count1.extend([x for x in Subbasin_1 if x[0] == '21']) 
>>> print OS_Count1 
[['21', '1']] 
+0

非常感謝!奇蹟般有效。你說得對,我爲Subbasin_1做的第一個附加功能是給我一個三層深的名單。 – Linda 2012-03-26 12:53:03

0

沒有什麼區別,暗示在通話時Subbasin_1可能是空的或者不包含您認爲它的數據。這也可能是Subbasin_1嵌套3層深,不2.

2

你的列表中理解[x for x in Subbasins_Imp if x[1] == '1']自行創建一個列表,當您將追加該列表Subbasin_1這意味着,你結束了一個雙嵌套列表。

比較:

sub_imp = [['22', '1'], ['21', '15'], ['11', '3'], ['31', '4'], ['41', '13']] 
sub_1 = [x for x in sub_imp if x[1] == '1'] 
sub_2 = [] 
sub_2.append([x for x in sub_imp if x[1] == '1']) 

print(sub_1) 
print(sub_2) 
2

運行代碼我得到一個三重嵌套列表....

Sub = [[['21','1'],....]] 

而不是做的:

Subbasin_1 = [] 
    Subbasin_1.append([x for x in Sub if x[1]=='1']) 

做簡單的列表理解:

Subbasin_1 = [x for x in Sub if x[1] == '1'] 

這會給你你期待的結果。

+0

非常感謝! – Linda 2012-03-26 12:54:06

相關問題