2016-05-20 15 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「2月」、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では、リストサイズを初期化する必要はありません(自動増加)。あなたがリストに入れたアイテムは、シーケンスで保存されていません。あなたのアイテムを同じシーケンスにしたい場合は、tupleをpythonでチェックしてください。 ハッピーコーディング

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

あなたが代わりに書くことができます - Pythonで

import itertools 

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

、あなたが配列で行うことができますようにあなたは、固定長のリストを作成することはできません他の言語では、第3行はちょうどt3 = []でなければなりません。

また、extend()関数を使用してリストを連結します。新しい値を1つ追加するには、代わりに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-of-list-in-python/952952#952952)。 – kennytm

2
  1. Pythonでは、リストに「容量を予約する」必要はありません。ただ、実際には

    t3 = [] 
    

    を書き、t3 = [len(t1)+len(t2)]も、長さ24のリストを作成しますが、単一のエントリ[24]でリストを作成しません。

  2. t1[a]およびt2[a]は、リストに追加する要素です。例えば、リストに

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

    .extendが(実際に任意の反復可能)をリストに追加するために使用されています要素を追加するには、.appendメソッドを使用します

    t3.extend([t1[a], t2[a]]) 
    
  3. 問題自体がlist comprehensionsを用いて容易に解くことができます。

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

(例えば、代わりに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 
関連する問題