2015-06-11 2 views
-1
def somalist (lista): 
    listasoma = [0,0,0,0,0,0,0,0,0,0,0] 
    for i in lista: 
     for g in i: 
      if i.index(g) != 0 and i.index(g) != 1 and i.index(g) != 2 and i.index(g) != 3: 
       listasoma[i.index(g)] += g 
      else: 
       listasoma[i.index(g)] = g 
      print(listasoma) 
    return(listasoma) 

x = [[1,2,3,4,5,6,7,8,9,10,11],[1,2,3,4,5,6,7,8,9,10,11],[1,2,3,4,5,6,7,8,9,10,11]] print(somalist(x))Python - Функция, которая суммирует список это с ошибкой

является то, что функция, она работает делает сумму каждого подсписка но сохраняет индекс [0], [1], [2] и [3] и суммировать чужие. В этом примере я буду использовать список x, в этом списке функция работает правильно. Выход из программы:

[1, 2, 3, 4, 32, 18, 21, 24, 27, 30, 22]

является то, что я сказал, что это сохраняет члены [0], [1], [2], [3] и просуммировать другие показатели каждого подсписка.

Но когда мы используем некоторые цифры более одного раза, это терпит неудачу.

с помощью: X = [[1,2,3,4,5,6,7,8,9,10,11],[1,2,3,4,**6**,6,7,8,9,10,11],[1,2,3,4,5,6,7,8,9,10,11]]

6 (индекс 4) во втором подсписке был прописан дважды (другой в индексе 5 в том же подсписке)

выхода был: [1, 2, 3, 4, **22**, 12, 21, 24, 27, 30, 33]

Это не так!

Правильный выход должен быть: [ 1, 2, 3, 4, 16, 18, 21, 24, 27, 30, 33]

Может кто-нибудь сказать мне, где мой код не так?

+2

Пожалуйста, выберите лучшее название –

+0

я очень жаль, что это была моя первая тема здесь в StackOverflow –

+0

Как указано в [документации] (https://docs.python.org/3/library/stdtypes. html? highlight = list # common-sequence-operations), 'index()' только находит первое вхождение. – TigerhawkT3

ответ

1

Я бы порекомендовал полностью обходить подход index().

def somalist (lista): 
    return lista[0][:4] + [sum(item) for item in list(zip(*lista))[4:]] 

Это работает на list с повторяющимися элементами.

          v 
>>> x = [[1,2,3,4,5,6,7,8,9,10,11],[1,2,3,4,5,6,7,8,9,10,11],[1,2,3,4,5,6,7,8,9,10,11]] 
>>> X = [[1,2,3,4,5,6,7,8,9,10,11],[1,2,3,4,6,6,7,8,9,10,11],[1,2,3,4,5,6,7,8,9,10,11]] 
>>> print(somalist(x)) 
[1, 2, 3, 4, 15, 18, 21, 24, 27, 30, 33] 
>>> print(somalist(X)) 
[1, 2, 3, 4, 16, 18, 21, 24, 27, 30, 33] 
      ^^ 
+0

Это Работа для меня, спасибо! –

Смежные вопросы