2016-05-20 168 views
1

我想創建一個列表,它可以從Python中的2個獨立列表交替添加元素。 我有以下想法,但它似乎不工作:python將元素附加到列表中的列表

t1 = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31] 
t2 = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 
'Jul', 'Aug', 'Sept', 'Oct', 'Nov', 'Dec'] 
t3= [len(t1)+len(t2)] 
a = 0 

while a < len(t1)+len(t2): 
    t3.extend(t1[a]) 
    t3.extend(t2[a]) 
    a = a + 1 
print t3 

所以基本上我想[「月」,31,「月」,28,「月」,31,等... ]

回答

1

在這裏你去:

t1 = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31] 
t2 = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 
     'Jul', 'Aug', 'Sept', 'Oct', 'Nov', 'Dec'] 
t3 = list() 

for i, j in zip(t1, t2): 
    t3.append(i) 
    t3.append(j) 

print(t3) 
0

你可能必須閱讀更多關於python列表及其方法。 t3= [len(t1)+len(t2)]這完全沒有必要。我想你有一個C背景,並試圖用大小初始化列表。在Python中,您不必初始化列表大小(其自動增加)。並且列表中的項目不會按照您輸入的序列存儲。請在Python中檢查tuple如果您希望項目的順序相同。 快樂編碼

+0

是的,我今天開始學習python。感謝您的幫助! – szotyi

0
t1 = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31] 
t2 = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 
     'Jul', 'Aug', 'Sept', 'Oct', 'Nov', 'Dec'] 

arr = [] 

for i in range(12): 
    arr.append(t2[i]) 
    arr.append(t1[i]) 

print(arr) 

輸出 -

['Jan', 31, 'Feb', 28, 'Mar', 31, 'Apr', 30, 'May', 31, 'Jun', 30, 'Jul', 31, 'Aug', 31, 'Sept', 30, 'Oct', 31, 'Nov', 30, 'Dec', 31] 

您也可以寫 -

import itertools 

arr = list(itertools.chain.from_iterable(zip(t2, t1)) 
0

在Python中,你不能用一個固定長度的創建列表像你可以用數組做在其他語言中,所以第三行應該是t3 = []

而且,extend()函數用於連接列表。要添加一個新值,您需要改用append()函數。

1

只需zip列表並展平結果。

>>> from itertools import chain 
>>> t1 = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31] 
>>> t2 = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 
... 'Jul', 'Aug', 'Sept', 'Oct', 'Nov', 'Dec'] 
>>> list(chain(*zip(t2, t1))) 
['Jan', 31, 'Feb', 28, 'Mar', 31, 'Apr', 30, 'May', 31, 'Jun', 30, 'Jul', 31, 'Aug', 31, 'Sept', 30, 'Oct', 31, 'Nov', 30, 'Dec', 31] 

沒有chain

>>> [x for tup in zip(t2, t1) for x in tup] 
['Jan', 31, 'Feb', 28, 'Mar', 31, 'Apr', 30, 'May', 31, 'Jun', 30, 'Jul', 31, 'Aug', 31, 'Sept', 30, 'Oct', 31, 'Nov', 30, 'Dec', 31] 
2

最短的解決方案可能是:

list(sum(zip(t2, t1),())) 
+2

一般來說,[不要使用'sum'來壓扁列表,它是O(n^2)](http://stackoverflow.com/questions/952914/making-a-flat-list-out-of -list- - 列表功能於蟒/ 952952#952952)。 – kennytm

2
  1. 在Python中,您不需要爲列表「保留容量」。只要寫

    t3 = [] 
    

    事實上,t3 = [len(t1)+len(t2)]甚至不產生長度爲24的列表,而是創建了一個條目[24]的列表。

  2. t1[a]t2[a]是要添加到列表中的元素。添加元素,可以使用.append方法:

    t3.append(t1[a]) 
    t3.append(t2[a]) 
    

    .extend用於添加的列表(事實上,任何可迭代)到列表,例如

    t3.extend([t1[a], t2[a]]) 
    
  3. 本身的問題可以很容易地使用list comprehensions來解決。

    [a for l in zip(t2, t1) for a in l] 
    

還有許多其他的改進可以作出(例如使用for循環而不是一個while循環)。你可以把它帶到http://codereview.stackexchange.com


(順便說一句,這代碼不處理閏年。)

0

Python是動態編程語言,識別符的類型,當它被分配的值被確定。 所以基本上你可以這樣做:

t1 = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31] 
t2 = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 
'Jul', 'Aug', 'Sept', 'Oct', 'Nov', 'Dec'] 
t3= [] 
for a in range(len(t1)): 
    append.append(t1[a]) 
    apppend.append(t2[a]) 
print t3