我有一个函数,我用来将一些数字转换成一个不同的形式,需要迭代几个数组。我使用了两个嵌套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” 我假设我需要以某种方式转换数据类型,但我不确定如何。
答案 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