Что-то идет не так во время первого цикла for

1

Я получаю результат: 2,1,8,0,0, он должен быть: 2,1,3,1,4, я использую PyCharm CE 2016.2.3 и Python 3.6.6 Спасибо за ваше время !

lotto = {
    '1': 0,
    '2': 0,
    '3': 0,
    '4': 0,
    '5': 0
}

test_list = [1, 1, 2, 3, 3, 3, 4, 5, 5, 5, 5]

for i in test_list:
    if test_list[i] == 1:
        lotto['1'] += 1
    if test_list[i] == 2:
        lotto['2'] += 1
    if test_list[i] == 3:
        lotto['3'] += 1
    if test_list[i] == 4:
        lotto['4'] += 1
    if test_list[i] == 5:
        lotto['5'] += 1

for i in lotto:
    print(lotto[i], end=",")
  • 1
    Измените test_list[i] == 1 на i==1 .
  • 0
    Цикл for ... in ... не индексирует список, а выполняет итерацию по каждому элементу в списке.
Показать ещё 1 комментарий
Теги:

4 ответа

0

Вы можете повторно реализовать свой код с collections.Counter:

from collections import Counter
test_list = [1, 1, 2, 3, 3, 3, 4, 5, 5, 5, 5]
lotto = Counter(map(str, test_list))
print(','.join(map(str, lotto.values())))
0

Ваш код должен быть:

lotto = {
    '1': 0,
    '2': 0,
    '3': 0,
    '4': 0,
    '5': 0
}
test_list = [1, 1, 2, 3, 3, 3, 4, 5, 5, 5, 5]

for i in test_list:
    i = str(i)
    lotto[i] = lotto[i] + 1

for i in lotto:
    print(lotto[i], end=",")
0

Браун!

Вы можете заменить цикл for лучшим способом использования списков в python:

for number in test_list:
    lotto[str(number)] += 1

Используйте номера в test_list для ссылки в ключевом значении.

lotto = {
'1': 0,
'2': 0,
'3': 0,
'4': 0,
'5': 0 }

test_list = [1, 1, 2, 3, 3, 3, 4, 5, 5, 5, 5]

for number in test_list:
   lotto[str(number)] += 1

И результат:

{'1': 2, '2': 1, '3': 3, '4': 1, '5': 4}
  • 0
    Спасибо! Удивительно видеть, как все делают что-то немного по-другому.
0

Похоже, вам нужно заменить test_list [i] только i, потому что я уже выполняет итерацию через test_list и проверяет каждый номер, а не индекс. Кроме того, только для хорошей практики, после первого блока if, измените каждый, если для elif.

lotto = {
    '1': 0,
    '2': 0,
    '3': 0,
    '4': 0,
    '5': 0
}
test_list = [1, 1, 2, 3, 3, 3, 4, 5, 5, 5, 5]

for i in test_list:
    if i == 1:
        lotto['1'] = lotto['1'] + 1
    elif i == 2:
        lotto['2'] += 1
    elif i == 3:
        lotto['3'] += 1
    elif i == 4:
        lotto['4'] += 1
    elif i == 5:
        lotto['5'] += 1
    i+=1

for i in lotto:
    print(lotto[i], end=",")

Ещё вопросы

Сообщество Overcoder
Наверх
Меню