2014-11-25 95 views
0

我有一个函数,我正在使用它将一些数字转换为需要迭代几个数组的不同形式。我使用了两个嵌套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) 

这就产生了“类型错误:列表索引必须是整数,而不是浮动” 我想我需要的数据类型转换莫名其妙,但我不知道如何。

+0

请发布给定输入示例的预期输出。 – wwii 2014-11-25 04:35:18

回答

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)] 
+0

非常感谢!具有很大的意义,清理后的功能更易于阅读。 – 2014-11-25 04:36:41

2

就快成功了!你得到类型错误的原因是你试图通过它的值访问列表。 zip将返回列表中元素的值。

因此你的代码应该已经

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

谢谢!清楚的解释。 – 2014-11-25 04:37:40

+0

欢迎光临!谢谢 – biobirdman 2014-11-25 04:43:49

1

事情与循环访问列表与循环是,你没有得到那个iterationposition指数,但实际的项目。

当你有下面的代码

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