Проблема с функцией zip в цикле; питон - PullRequest
0 голосов
/ 03 ноября 2011

Работа в Python 2.7.

У меня есть два списка (упрощено, чтобы пояснение было более понятным):

T = [[1, 0], [1, 0], [0, 5], [3, -1]]
B = [[1], [3], [2], [2]]

И три функции.

def exit_score(list):
    exit_scores = []
    length = len(list)
    for i in range(0, length):
        score = list[i][2] - list[i][0]
        exit_scores.append(score)
    return exit_scores

ПервыйЯ добавляю соответствующие значения B в соответствующие списки в T:

def Trans(T, B):
    for t, b in zip(T, B):
        t.extend(b)
    a = exit_score(T)
    b = T
    score_add(b, a)

Затем, используя ранее перечисленную функцию exit_score.Я вычитаю значение в позиции списка [2] из значения в позиции списка [0] для каждого списка.Затем я добавляю эти результаты в другой список (exit_scores).

Наконец, я хочу добавить exit_scores (теперь a) к исходному списку.

Поэтому я использую свой Score_add (b,а) функция, которая является:

score_add(team, exit_scores):
    for t, e in zip(team, exit_scores)
        t.extend(e)
    print team

Если бы все работало правильно, я получил бы вывод, подобный этому:

[[1,0,1,0], [1,0,3,-2], [0,5,2,-2], [3,-1,2,1]]

Вместо этого я получил TypeError, сообщающую мне, что я могу 'итерации по целому числу.Но я попытался напечатать и a, и b, и оба они находятся в форме списка!

Когда я изменяю код, чтобы убедиться, что результаты выхода находятся в списке:

def Trans(T, B):
    es = []
    for t, b in zip(T, B):
        t.extend(b)
    es.append(exit_score(T))
    score_add(T, es)

весь список выходных баллов добавляется в конец первого списка T:

[[1, 0, 1, 0, 2, 2, -1], [1, 0, 3], [0, 5, 2], [3, -1, 2]]

Из-за жизни я не могу понять, что я делаю неправильно ...

Ответы [ 2 ]

4 голосов
/ 03 ноября 2011

На этот раз это list.append(), а не list.extend():

def score_add(team, exit_scores):
    for t, e in zip(team, exit_scores)
        t.append(e)
    print team

B - это список списков, а exit_scores - это список целых чисел.

Редактировать : Вот очищенная версия всего кода:

for t, b in zip(T, B):
    t.extend(b)
    t.append(t[2] - t[0])
0 голосов
/ 03 ноября 2011

Я укушу:

map(lambda x, y: x + y + [x[0] - y[0]], T, B)

Уступая:

[[1, 0, 1, 0], [1, 0, 3, -2], [0, 5, 2, -2], [3, -1, 2, 1]]

Также это можно сделать в понимании списка:

[x+y+[x[0]-y[0]] for x, y in zip(T, B)]
...