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] は mean[0] と比較され、x[2] は mean[1] と比較され、x[3] は mean[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

何をすべきかについて少し迷っているので、どんな助けもいただければ幸いです。ああ、それを簡単にしてください。私は自分が何をしているのかよくわかりません。

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 に答える