TypeError: индексы списка должны быть целыми числами или срезами, а не кортежем, я очень новичок и не понимаю, почему мой список списков не работает

#python

#python

Вопрос:

 theListofSalary = [
["     $0 -   $9,999  ",": "]
["$10,000 -   $19,999 ",": "]
["$20,000 -   $29,999 ",": "]
["$30,000 -   $39,999 ",": "]
["$40,000 -   $49,999 ",": "]
["$50,000 -   $59,999 ",": "]
["$60,000 -   $69,999 ",": "]
["$70,000 -   $79,999 ",": "]
["$80,000 -   $89,999 ",": "]
["$90,000 -   $99,999 ",": "]
["$100,000 - $149,999 ",": "]
["$150,000 and over   ",": "]
]
  

Как следует из названия, я понятия не имею, почему список list выдает мне эту ошибку. Я попытался найти ошибку, но я новичок и не могу понять, что они говорят.

Ответ №1:

Вы пропускаете , после каждого элемента списка

 theListofSalary = [
    ["     $0 -   $9,999  ",": "], 
    ["$10,000 -   $19,999 ",": "],
    ....
  

Ответ №2:

Вам не хватает запятых между элементами вашего основного списка.

 theListofSalary = [
    ["     $0 -   $9,999  ",": "],
    ["$10,000 -   $19,999 ",": "],
    ["$20,000 -   $29,999 ",": "],
    ["$30,000 -   $39,999 ",": "],
    ["$40,000 -   $49,999 ",": "],
    ["$50,000 -   $59,999 ",": "],
    ["$60,000 -   $69,999 ",": "],
    ["$70,000 -   $79,999 ",": "],
    ["$80,000 -   $89,999 ",": "],
    ["$90,000 -   $99,999 ",": "],
    ["$100,000 - $149,999 ",": "],
    ["$150,000 and over   ",": "]
]
  

Вы заметите, что я добавил запятые ко всем, кроме последнего, и теперь это должно сработать 🙂

Комментарии:

1. @AkiraPatafio Без проблем. Это ситуация, когда IDE — ваш лучший друг. Как только я скопировал / вставил его в свой, стало ясно, в чем проблема, судя по тому, как он был выделен. Может быть, вы могли бы изучить возможность использования PyCharm (то, что я использую), поскольку это бесплатно. Хотя есть много других отличных IDE!

Ответ №3:

Вам не хватает запятых ( , ) после каждой записи в вашем объявлении списка, как указано в других ответах. Однако другие ответы не объясняют, почему вы видите странную ошибку.

Что происходит, так это то, что Python думает, что вы пытаетесь произвести индексацию в первый внутренний список, используя второй внутренний список, который, оказывается, является типом данных кортежа (или неизменяемым списком, разделенным запятыми).

 print([""][0])    # this works and prints ""
print([""][0, 0]) # TypeError: list indices must be integers, not tuple
  

Это важно понимать, потому что следующий код не вызывает проблем у интерпретатора и может привести к очень тонким ошибкам в большой программе:

 theListofSalary = [
    ["     $0 -   $9,999  "]
    [0]
    [0]
    [0]
    [0]
    [0]
    [0]
    [0]
    [0]
    [0]
    [0]
    [0]
]
print(theListofSalary)
  

Приведенный выше код печатается [' '] . Вы можете понять, почему?

Другой пример:

 theListofSalary = [
    ["     $0 -   $9,999  "]
    [0]
    [12]
]
print(theListofSalary)
  

С принтами ['$'] . Опять же, вы можете понять, почему это работает?

 theListofSalary = [
    ["     $0 -   $9,999  "]
    [0]
    [80]
]
print(theListofSalary)
  

В приведенном выше примере мы получаем IndexError: string index out of range .

 theListofSalary = [
    ["     $0 -   $9,999  "]
    [0]
    ["hello world"]
]
print(theListofSalary)
  

Приведенный выше пример выдает TypeError: string indices must be integers .

Надеюсь, вы начинаете видеть шаблон здесь! Короче говоря, не забудьте добавить запятые в объявления вашего списка, чтобы интерпретатор не перепутал ваши вложенные списки с операциями индексации в первом вложенном списке.

И последнее, но не менее важное, руководство по стилю Python предлагает snake_cased_variable_names . Заголовок списка как the_list_of_salaries излишне подробный; Я рекомендую называть этот список salaries просто.