Индексы списка Python должны быть целыми, а не кортежем "

Я уже два дня бил головой об этом. Я новичок в python и программировании, поэтому другие примеры этого типа ошибок не очень помогли мне. Я читаю документацию для списков и кортежей, но не нашел ничего, что помогает. Любой указатель был бы очень оценен. Не обязательно искать ответ, просто больше ресурсов на том, где искать. Я использую Python 2.7.6. благодаря

measure = raw_input("How would you like to measure the coins? Enter 1 for grams 2 for pounds. ") coin_args = [ ["pennies", '2.5', '50.0', '.01'] ["nickles", '5.0', '40.0', '.05'] ["dimes", '2.268', '50.0', '.1'] ["quarters", '5.67', '40.0', '.25'] ] if measure == 2: for coin, coin_weight, rolls, worth in coin_args: print "Enter the weight of your %s" % (coin) weight = float(raw_input()) convert2grams = weight * 453.592 num_coin = convert2grams / (float(coin_weight)) num_roll = round(num_coin / (float(rolls))) amount = round(num_coin * (float(worth)), 2) print "You have %d %s, worth $ %d, and will need %d rolls." % (num_coin, coin, amount, num_roll) else: for coin, coin_weight, rolls, worth in coin_args: print "Enter the weight of your %s" % (coin) weight = float(raw_input()) num_coin = weight / (float(coin_weight)) num_roll = round(num_coin / (float(rolls))) amount = round(num_coin * (float(worth)), 2) print "You have %d %s, worth $ %d, and will need %d rolls." % (num_coin, coin, amount, num_roll) 

Это трассировка стека:

 File ".\coin_estimator_by_weight.py", line 5, in <module> ["nickles", '5.0', '40.0', '.05'] TypeError: list indices must be integers, not tuple 

  • Быстрое преобразование из массивов Python в PostgreSQL?
  • Paramiko и exec_command - убивающий удаленный процесс?
  • Игнорировать регистр в glob () в Linux
  • В чем разница между рядами pandas и одноколоночным DataFrame?
  • Как вы получаете заголовки по умолчанию в запросе urllib2?
  • PyQt5: как заставить QThread возвращать данные в основной поток
  • Как я могу изменить язык администратора Django?
  • Python: «вставить» несколько (неизвестных) csvs вместе
  • 3 Solutions collect form web for “Индексы списка Python должны быть целыми, а не кортежем "”

    Проблема в том, что [...] в python имеет два разных значения

    1. expr [ index ] означает доступ к элементу списка
    2. [ expr1, expr2, expr3 ] означает создание списка из трех элементов из трех выражений

    В вашем коде вы забыли запятую между выражениями для элементов во внешнем списке:

     [ [a, b, c] [d, e, f] [g, h, i] ] 

    поэтому Python интерпретировал начало второго элемента как индекс, который должен применяться к первому, и это то, что говорит сообщение об ошибке.

    Правильный синтаксис для того, что вы ищете

     [ [a, b, c], [d, e, f], [g, h, i] ] 

    Чтобы создать список списков, вам нужно разделить их запятыми, например

     coin_args = [ ["pennies", '2.5', '50.0', '.01'], ["nickles", '5.0', '40.0', '.05'], ["dimes", '2.268', '50.0', '.1'], ["quarters", '5.67', '40.0', '.25'] ] 

    Почему в этой ошибке упоминаются кортежи?

    Другие объяснили, что проблема была в недостатке, но последняя загадка – почему сообщение об ошибке говорит о кортежах?

    Причина в том, что ваш:

     ["pennies", '2.5', '50.0', '.01'] ["nickles", '5.0', '40.0', '.05'] 

    может быть уменьшено до:

     [][1, 2] 

    как упомянуто 6502 с той же ошибкой.

    Но тогда __getitem__ , который имеет дело с [] разрешением, преобразует object[1, 2] в кортеж:

     class C(object): def __getitem__(self, k): return k # Single argument is passed directly. assert C()[0] == 0 # Multiple indices generate a tuple. assert C()[0, 1] == (0, 1) 

    и реализация __getitem__ для списка встроенного класса не может иметь дело с такими аргументами.

    Я также рекомендую вам попробовать в будущем представить минимальные примеры 🙂

    Дополнительные примеры действий __getitem__ адресу: https://stackoverflow.com/a/33086813/895245

    Python - лучший язык программирования в мире.