1

我有两个清单:

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()的长度b只有一个,那么它将只返回一个结果。即它的结果长度等于min(len(a),len(b))

但如果izip_longest结果长度为max(len(a),len(b)),如果fillvalue未提供,则返回 None。

于 2013-01-23T06:25:12.587 回答
1

好的,我迟到了至少一个小时,但是这个想法怎么样:

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

由于有关 zip 状态的文档

返回的列表在长度上被截断为最短参数序列的长度。

将列表a转换为较短的参数怎么样?既然一切都比一个永远运行的周期短,让我们试试

import itertools

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

感谢 Ashwini Chaudhary 让我注意到了 itertools ;)

于 2013-01-23T08:24:58.387 回答