迭代多个数组

时间:2014-11-25 04:14:53

标签: python list

我有一个函数,我用来将一些数字转换成一个不同的形式,需要迭代几个数组。我使用了两个嵌套for循环,但结果不是我所期望的。我希望函数返回总共5个变量,但它返回每个数组中变量的数量相互乘以。因此,在下面的例子中,它返回一个包含25个变量的数组。

co_60_activities = [2 , 2 , 3 , 3 , 3]
co_60_masses     = [2 , 2 , 3 , 3 , 3] 
def activity(activities, masses, array):
    for x in range(len(activities)):
        for y in range(len(masses)):
            array.append(activities[x] * masses[y] * 37000.0)
a_counts = []
activity(co_60_activities, co_60_masses, a_counts)

我在类似的帖子中发现迭代多个列表的传统方法是使用zip函数。所以我将我的功能改为:

def activity(activities, masses, array):
    for x , y in zip(activities , masses):
        array.append(activities[x] * masses[y] * 37000.0)

这会产生“TypeError:list indices必须是整数,而不是float” 我假设我需要以某种方式转换数据类型,但我不确定如何。

3 个答案:

答案 0 :(得分:4)

zip将自己提供实际项目,而不是其索引。所以,你可以直接做

array.append(x * y * 37000.0)

实际上你不需要这里的函数,而是你可以用这样的列表理解创建一个新的列表

a_counts = [x * y * 37000.0 for x, y in zip(co_60_activities, co_60_masses)]

答案 1 :(得分:2)

你快到了!您收到类型错误的原因是您尝试按其值访问列表。 zip将返回列表中元素的值。

因此你的代码应该是

def activity(activities, masses, array):
    for x , y in zip(activities , masses):
        array.append(x * y * 37000.0)

答案 2 :(得分:1)

使用for循环遍历列表的事情是你没有获得索引,而是获得该迭代位置的实际项目。

作为示例,您有以下代码

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

    for x in examplelist:
        print x

输出将是

a
b
c

zip()仅连接2个列表,以便您获得以下内容

examplelist1 = ['1','2','3']
examplelist2 = ['a','b','c']

for x,y in zip(examplelist1,examplelist2):
    print x, y

输出:

1 a
2 b
3 c