4

同じ長さのリスト、たとえば4つがいくつかありますが、これは変更される可能性があります。私がやりたいのは、これらのリストを組み合わせて、各リストの最初のアイテムであるitem[0]を組み合わせて新しいリストを作成することです。item [1]、item [2]なども同様です。これは簡単に思えますが、リスト名(つまり、slide1)が最初のリスト(list1)から動的に作成されるようにするにはどうすればよいですか。

つまり、私はこれから行きたいです:

list1 = ['slide1','slide2','slide3','slide4']
list2 = [1,2,3,4]
list3 = ['banana', 'apple', 'pear', 'orange']

これに:

slide1 = ['slide1',1,'banana']
slide2 = ['slide2',2,'apple']
slide3 = ['slide3',3,'pear']
slide4 = ['slide4',4,'orange']

これを行う必要がある理由は、後でこれらのリストをデータベースに入力するためです。手がかりはありますか?forループの実行方法は知っていると思いますが、「動的」リスト名の作成に固執しています。それ以外の場合は辞書を使用する必要がありますか?

助けてくれてありがとう!

4

4 に答える 4

10

非常に簡単:

lst = zip(list1, list2, list3)

print(lst[0])
>>> ('slide1', 1, 'banana')

# in case you need a list, not a tuple
slide1 = list(lst[0])
于 2012-07-22T09:53:04.427 に答える
3

変数名をその場で作成する必要はありません。

実際、そもそも持っているべきではlist1, list2, list3なく、次のような単一のリストを持っている必要がありlistsます。

>>> lists = [['slide1','slide2','slide3','slide4'], [1,2,3,4], ['banana', 'apple', 'pear', 'orange']]
>>> slides = [list(slide) for slide in zip(*lists)]
>>> slides
[['slide1', 1, 'banana'], ['slide2', 2, 'apple'], ['slide3', 3, 'pear'], ['slide4', 4, 'orange']]

ここで、の代わりにlist1を使用lists[0]し、の代わりにslide1を使用しますslides[0]。これは、よりクリーンで保守が容易であり、拡張性があります。

于 2012-07-22T10:22:32.167 に答える
1

itertools.izipリストが非常に大きく、新しいスライドを繰り返す必要がある場合は、使用する方が効率的です。

import itertools
for x in itertools.izip(list1, list2, list3):
    print x
于 2012-07-22T10:29:04.943 に答える
1

dict直接的な答えは、次のように実現できるキーとしてlist1要素を使用したいようです。

dict( zip(list1, list(zip(list2, list3))) )

ただし、Timは、データ構造を確認する必要があると言っているのは正しいです...

于 2012-07-22T11:32:30.263 に答える