5

辞書内にリストがあります:

Number_of_lists=3           #user sets this value, can be any positive integer
My_list={}
for j in range(1,Number_of_lists+1):
  My_list[j]=[(x,y,z)]  

Number_of_listsユーザーが設定する変数です。ユーザーが設定した値を事前に知らなくても、最終的にすべての辞書リストのリストをマージしたいと思います。たとえばNumber_of_lists=3、対応するリストがMy_list[1]=[(1,2,3)],のMy_list[2]=[(4,5,6)]場合My_list[3]=[(7,8,9)]、結果は次のようになります。

All_my_lists=My_list[1]+My_list[2]+My_list[3]

ここで: All_my_lists=[(1,2,3),(4,5,6),(7,8,9)].

だから私がやろうとしているのは、上記の手順を可能な限り自動化することです:

Number_of_lists=n #where n can be any positive integer

イテレータを使用してリストを追加しようとすると、常に失敗するので、今まで少し迷っています。私はPythonの初心者で、これは私の趣味です。答えたら、答えのすべてを説明してください。私は学ぶためにこれをやっています。あなたに宿題をするように頼んでいるわけではありません:)

編集

My_List@codebox (下のコメントを見てください)は、私のコードに表示されているのは実際には辞書であり、リストではないことを正しく指摘しました。コードを使用する場合は注意してください。

4

4 に答える 4

1

最初に生成しAll_my_lists、次にMy_list.

建物All_my_lists

リスト内包表記を使用range()して生成するAll_my_lists:

>>> num = 3  # for brevity, I changed Number_of_lists to num
>>> All_my_lists = [tuple(range(num*i + 1, num*(i+1) + 1)) for i in range(0, num)]
>>> All_my_lists
[(1, 2, 3), (4, 5, 6), (7, 8, 9)]

または、 itertools レシピgrouper()のリストから関数を使用することもできます。これにより、よりクリーンなコードが得られます。

>>> All_my_lists = list(grouper(num, range(1, num*3+1)))
>>> All_my_lists
[(1, 2, 3), (4, 5, 6), (7, 8, 9)]

建物My_lists

次に、リスト内包表記とともにdictコンストラクターを使用して、enumerate()派生元を構築できMy_listますAll_my_list

>>> My_lists = dict((i+1, [v]) for i,v in enumerate(All_my_lists))
>>> My_lists
{1: [(1, 2, 3)], 2: [(4, 5, 6)], 3: [(7, 8, 9)]}
>>> My_lists[1]
[(1, 2, 3)]
>>> My_lists[2]
[(4, 5, 6)]
>>> My_lists[3]
[(7, 8, 9)]
于 2012-08-15T10:56:42.390 に答える
1

最終的なリストだけに関心があり、実際には必要ない場合My_list(これは辞書なので名前を変更する必要があります!)、次のようにするだけです。

Number_of_lists=3
result = []
for j in range(1,Number_of_lists+1):
    result += (x,y,z)
于 2012-08-15T10:47:27.983 に答える
1

リスト内包表記を使用します。

>>> Number_of_lists=3 
>>> My_list={}
>>> for j in range(1,Number_of_lists+1):
      My_list[j]=(j,j,j)
>>> All_my_lists=[My_list[x] for x in My_list]

>>> print(All_my_lists)
[(1, 1, 1), (2, 2, 2), (3, 3, 3)]

All_my_lists=[My_list[x] for x in My_list]次と同等です。

All_my_lists=[]
for key in My_list:
   All_my_lists.append(My_list[key])
于 2012-08-15T10:48:20.900 に答える
1

Number_of_listsを使用して一連のキーに変換し、次rangeのように辞書から選択することで、より機能的なアプローチを試すことができmapます。

My_list={1:[1,2,3], 2:[4,5,6], 3:[7,8,9], 4:[10,11,12]}
Number_of_lists=3
All_my_lists=map(lambda x: tuple(My_list[x]), range(1, Number_of_lists+1))

出力例:

>>> All_my_lists
[(1, 2, 3), (4, 5, 6), (7, 8, 9)]
于 2012-08-15T11:06:08.457 に答える