在代码中我有一系列列表,每个列表包含相同数量的条目。我现在要做的是遍历列表并将一个列表索引除以另一个列表索引。
threads = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12]
dsk_indpt_PI = [99, 197, 295, 387, 391, 406, 407, 416, 424, 426, 425, 439]
avg_val = []
for x in threads:
result = dsk_indpt_PI[x]/threads[x]
avg_val.append(result[x])
我不确定上述方法是否有效,以前的方法遇到了无法在类型int和类型列表之间进行划分的问题。上面的例子会更好吗?如果没有,应该改变什么使其按预期运行?谢谢。
答案 0 :(得分:2)
更好的方法是使用zip
。
你可以试试这个:
avg_vals = []
for thread, dsk_ind in zip(threads, dsk_indpt_PI):
avg_vals.append(dsk_ind / thread)
zip
需要两个(或更多)迭代,并将它们组合成一个长度等于最短迭代的元组列表。
答案 1 :(得分:2)
如果您遍历列表,则会获得列表的值,不索引。
您可以使用range(len(..))
获取索引。此外,结果为result
,而不是result[x]
将其存储到avg_val
中:
avg_val = []
for x in range(len(threads)):
result = dsk_indpt_PI[x]/threads[x]
avg_val.append(result)
但更多Pythonic版本将使用 zip
:
avg_val = []
for a,b in zip(dsk_indpt_PI, threads):
result = a/b
avg_val.append(resul)
我们可以在列表理解:
中进行此操作avg_val = [a/b for a,b in zip(dsk_indpt_PI, threads)]
列表理解是一种通过在方括号之间编写生成器语法以更优雅的方式创建列表的方法。
答案 2 :(得分:0)
如果您使用常规for
循环遍历列表,则将获得值,而不是索引。如果您想要索引,可以使用for i in range(len(myList)):
,它会为列表中的每个索引i
提供。或者,如果您希望两者索引和值,则可以使用for index, value in enumerate(myList)
。
答案 3 :(得分:0)
threads = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12]
dsk_indpt_PI = [99, 197, 295, 387, 391, 406, 407, 416, 424, 426, 425, 439]
avg_val = []
for x in range(len(threads)):
result = dsk_indpt_PI[x]/threads[x]
avg_val.append(result)
print(avg_val)
对象不可迭代,你不能使用result [x],因为它不是一个列表,并且每次都被重置。
答案 4 :(得分:0)
使用pythonic方式,一线解决方案:
print([item[1]/item[0] for item in zip(threads,dsk_indpt_PI)])
输出:
[99.0, 98.5, 98.33333333333333, 96.75, 78.2, 67.66666666666667, 58.142857142857146, 52.0, 47.111111111111114, 42.6, 38.63636363636363, 36.583333333333336]
以上列表理解与:
相同divide=[]
for item in zip(threads,dsk_indpt_PI):
divide.append(item[1]/item[0])
print(divide)