迭代列表并使用其他列表的ltems

时间:2016-08-26 05:22:47

标签: python python-2.7

l = ['hello','hi']
a=[1,2,3,4]
b=[4,5,6,7]
for i in l:
 func(x=a[index],y=b[index])

现在,当我迭代l时,在第一次迭代中,我想首先使用[0]和b [0]作为函数,然后使用[1]和b [1]作为相同的函数< / p>

在l的第二次迭代中,我想首先使用[2]和b [2]作为函数,然后使用[3]和b [3]作为相同的函数。

任何建议都将受到赞赏。

2 个答案:

答案 0 :(得分:2)

>>> l = ['hello','hi']
>>> a=[1,2,3,4]
>>> b=[4,5,6,7]
>>> for i, val in enumerate(l):
...     print '---iteration', i
...     print 'l:', val
...     print 'a:', a[2*i], ', b:', b[2*i]
...     print 'a:', a[2*i+1], ' b:', b[2*i+1]
...
---iteration 0
l: hello
a: 1 , b: 4
a: 2  b: 5
---iteration 1
l: hi
a: 3 , b: 6
a: 4  b: 7

答案 1 :(得分:0)

您可以使用索引方法查找要迭代的列表元素的索引。使用该索引,您可以从列表中找到要传递给函数的元素。

l = ['hello','hi']
a=[1,2,3,4]
b=[4,5,6,7]

def demo(x, y):
    print x, y

for i in l:
    print i
    idx = 2*(l.index(i))
    demo(x=a[idx],y=b[idx])
    demo(x=a[idx+1],y=b[idx+1])

我不想在a调用中计算bdemo()的索引,而是先计算它。因为,每次计算都有O(1)的复杂度,如果我在demo的调用中做同样的事情(即如果我正在做demo(x=a[2*(l.index(i))],y=b[2*(l.index(i))])),那么我结束了两次计算索引会导致O(2)的复杂性。我以同样的方式访问列表l两次,这也增加了复杂度计算的开销。因此,事先计算索引,访问列表l一次,每次调用demo时复杂度降低2倍。