1

私は2つのリストを持っています:

a = ['a', 'b', 'c']
b = [1]

出力を次のようにします。

a, 1
b, 1
c, 1

これをやってみました:

for i, j in zip(a, b):
    print i, j 

私は得るだけa, 1です。どうすれば正しくできますか?

これは私の実際のシナリオです:

 if request.POST.get('share'):
            choices = request.POST.getlist('choice')
            person = request.POST.getlist('select')
            person = ''.join(person)
            person1 = User.objects.filter(username=person)
            for i, j in izip_longest(choices, person1, fillvalue=person1[-1]):
                start_date = datetime.datetime.utcnow().replace(tzinfo=utc)
                a = Share(users_id=log_id, files_id=i, shared_user_id=j.id, shared_date=start_date)
                a.save()
            return HttpResponseRedirect('/uploaded_files/')
4

2 に答える 2

5

おそらくitertools.izip_longest()ここで使用する必要があります:

In [155]: a = ['a', 'b', 'c']

In [156]: b = [1]

In [158]: for x,y in izip_longest(a,b,fillvalue=b[-1]):
   .....:     print x,y
   .....:     
a 1
b 1
c 1

の場合、zip()の長さがb1 つだけなので、結果は 1 つだけ返されます。つまり、結果の長さが等しいmin(len(a),len(b))

ただしizip_longest、結果の長さがmax(len(a),len(b))の場合、 が指定されていない場合fillvalueは None を返します。

于 2013-01-23T06:25:12.587 に答える
1

OK、少なくとも 1 時間は遅れていますが、このアイデアはどうでしょうか。

a = ['a', 'b', 'c']
b = [1]

ドキュメントがzip状態であるため

返されるリストは、最短の引数シーケンスの長さに切り捨てられます。

リストaをより短い引数に変更するのはどうですか? そして、すべては永遠に続くサイクルよりも短いので、試してみましょう

import itertools

d = zip(a, itertools.cycle(b))

itertools に注目してくれた Ashwini Chaudhary に感謝します ;)

于 2013-01-23T08:24:58.387 に答える