2013-06-26 10 views
2

我有一些代码在这里我有问题:如何遍历配对值,以及如何从您正在使用的列表中命名变量?

items = [["item1", 5, 10, 8, 6], ["item2", 4, 6, 3, 9]] 
mean = [5, 5, 5, 5] 
for x in items[0]: 
    value = 0 
    for y in mean: 
     if x >= y: 
      value = value + 1 

我基本上是想通过每个列表迭代因此X [1]获取比较[0],X [2]被比较的意思是指[1]和x [3]与平均值[2]进行比较,依此类推。然后再次重复下一个列表。所以我知道那里的'for y'意味着我将x [0]与所有y值进行比较,但是我不知道如何将其改为我想要的值?其次,我想'价值'实际上等于每个列表中的第一个项目。所以,而不是价值它实际上是item1。因为我不知道item1是什么,我需要将它从列表中提取出来,然后将其作为变量,并且我不知道如何执行此操作。因此,在现实中,它应该是这样的:

items = [["item1", 5, 10, 8, 6], ["item2", 4, 6, 3, 9]] 
mean = [5, 5, 5, 5] 
for x in items[0]: 
    *item1* = 0 (but this needs to be named from x[0] 
    for y in mean: 
     if x >= y: 
      *item1* = *item1* + 1 

所以最终我想输出是这个样子:

item1 = 4 
item2 = 2 

在一个有点损失,以什么这样做的任何帮助将不胜感激。哦,请保持简单我不知道我在做什么。

+0

使用索引,而不是直接迭代。 – Kevin

+0

[Python - 使用变量作为列表名称]的可能重复(http://stackoverflow.com/questions/13324465/python-use-a-variable-as-a-list-name) – Marcin

回答

2

您可以使用zip:在相同指数

zip回报的项目从传递给它的iterables。

演示:

>>> item = items[0] 
>>> zip(item[1:], mean) 
[(5, 5), (10, 5), (8, 5), (6, 5)] 

zip返回的元组的列表,用于存储有效的解决方案使用iterools.izip

代码:

for item in items: 
    val = sum(x >= y for x,y in zip(item[1:], mean)) 
    # x>=y is either True or False and in python True == 1, False == 0 
    print "{} = {}".format(item[0],val) 
...  
item1 = 4 
item2 = 2 
0

您可以使用此 “一行代码”:

ans = dict([(j[0],sum([1 for i,v in enumerate(j[1:]) if v>=mean[i]])) for j in items]) 
#{'item1': 4, 'item2': 2} 

item1, item2 = ans['item1'], ans['item2']