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,而不是 value。因为我不知道 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

对于该怎么做有点茫然,任何帮助都将不胜感激。哦,请保持简单,我真的不知道我在做什么。

4

2 回答 2

2

您可以使用zip

zip从传递给它的迭代中返回相同索引上的项目。

演示:

>>> 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
于 2013-06-26T18:59:25.353 回答
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']
于 2013-06-26T19:05:05.120 回答