2016-04-14 293 views
2

我有一個元素列表。每個元素都是一個列表。例如如何訪問嵌套列表中的元素

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

我該如何去了解外表中每個元素的第二個元素,即[2,5,...]?

a [:,2]會很好(它可能有其他可能的解釋),但看起來我做這件事的唯一方法是使用for循環的一些描述。如果是後者,對我來說,我會更好地用每個元素的命名數組重寫我的代碼。然後我會問 - 列表何時會有用?

如果我使用圓括號並用元組替換了術語列表,那麼我可以同樣問相同的問題,然後引導我問爲什麼要打擾差異?一個元組給了我什麼,我不能用一個列表實現?

回答

0

如果你想避免環路您可以使用itemgettermap提取列表:

import operator 

a = [[1,2,3,[1,2,3,4]], [4,5,6,[2,5]], [7,8,9,[3,3,4]]] 
print map(operator.itemgetter(1), a) # [2, 5, 8] 

根據您的列表保存什麼數據,你可能會更好創建類和使用對象來代替。通過使用列表,您可以使用列表操作,並允許將子列表用作序列和迭代列表,這些列表可能會有所幫助,具體取決於您想要對數據執行的操作。自定義類和magic methods可以實現同樣的功能,但需要更多的工作。

使用元組將允許您在sets和dict中使用它們,因爲它們是不可變的。有other questions關於差異的詳細答案。

+0

數據基本上如所示 - 外部列表的每個元素都是一個數字列表和一個可變長度的數組數組。每個元素表示特定解決方案的各種數量。找到所有解決方案後,我想選擇滿足特定屬性的解決方案。一個類是好的,但我有一個列表/數組的對象,我仍然會有同樣的問題 – user3799584

+0

我正在考慮將內部列表轉換爲對象,如果它們都具有相同的長度和每個索引中的數字/列表有一個具體含義代碼可能更易讀,如果使用對象代替。您仍然可以使用map或列表理解來從元素中生成列表,而不管它們是對象還是列表。 – niemmi

0

你有沒有試過?

>>> a=[[1, 2, 3, [1, 2, 3, 4]], [4, 5, 6, [2, 5]], [7, 8, 9, [3, 3, 4]]] 
>>> [ i[1] for i in a] 
[2, 5, 8] 
+0

否則稱爲for循環!我可以看到沒有理由不允許[:,1]作爲有效的構造。它肯定比整個代碼中的一堆for循環更具可讀性。或者「列表理解」,如果你願意的話。 – user3799584

+0

向語言設計者投訴或撰寫您自己的語言。 –

+0

正如我的問題所問 - 我可以做到沒有for循環。由於答案顯然不是,最好重寫代碼並用自己的名字而不是單個列表分隔所有變量。 – user3799584