#python #list #loops
Вопрос:
Я приношу свои извинения, если есть дураки! Я пытался найти похожие вопросы, но безуспешно 🙁 Допустим, мой код выглядит следующим образом:
buckets = []
A = ["apple", "pear", "orange"]
B = ["pear"]
for a in A:
if a in B:
buckets.append(A[a])
итак, поскольку груша из A встречается в B, я хотел бы добавить «грушу» в свой список, чтобы показать, что «груша» находится в списке A и произошла в списке B. Однако я получаю сообщение об ошибке
TypeError: list indices must be integers or slices, not str
Вопрос кажется действительно тривиальным, но я, похоже, не могу найти ошибку. Любая помощь будет признательна!
ПРАВКА : это было такое маленькое исправление! Так что извините за такой излишне выглядящий вопрос. Спасибо, что ответили!
Комментарии:
1. Когда вы тестируете
if a in B:
, какую ценность вы ожидаетеa
получить? Если тест пройдет успешно, что вы хотите добавить вbuckets
него ? Какова связь между этой ценностью иa
ценностью? «Вопрос кажется действительно тривиальным, но я, похоже, не могу найти ошибку» Ну, вы прочитали сообщение об ошибке? Вы понимаете, что это значит? Вы понимаете, как это связано со строкой кода, на которую он жалуется? Например, вbuckets.append(A[a])
, как вы думаете, о чем идетlist
речь? Как ты думаешьindex
, о чем это говорит?2. Кроме того, что произошло, когда вы попытались скопировать и вставить сообщение
TypeError: list indices must be integers or slices, not str
в поисковую систему? Когда я это делаю, я получаю много полезных результатов.
Ответ №1:
Вы перебираете слова списка, а не индексы. Это означает, что вы индексируете тип списка со строкой, которая работает не так, как работает тип списка. Быстрое решение было бы:
for a in A:
if a in B:
buckets.append(a)
Комментарии:
1. о боже, всем огромное спасибо, ЛОЛ, как я этого не ЗАМЕТИЛ 🙁 спасибо!
Ответ №2:
Здесь A[a]
вы пытаетесь получить элемент, используя сам элемент. for a in A
производит элементы, а не индексы.
Решение простое:
buckets.append(a)
И на самом деле этого можно было бы достичь проще:
buckets = list(set(A).intersection(B))
Комментарии:
1.
set(A B)
даст вам объединение A и B. Это, похоже, не то, о чем просит ОП.2. @хелвуд согласился. Исправлен ответ.
3.о боже, всем огромное спасибо, ЛОЛ, как я этого не ЗАМЕТИЛ 🙁 спасибо!
Ответ №3:
Вы на правильном пути. Просто ваше заявление о добавлении неверно. Сделай это
buckets = []
A = ["apple", "pear", "orange"]
B = ["pear"]
for a in A:
if a in B:
buckets.append(a)
Питонический способ-это использование понимания списка:
buckets =[i for i in A if i in B]
Ответ №4:
Я думаю, что это должно сработать нормально
buckets = []
A = ["apple", "pear", "orange"]
B = ["pear"]
for a in A:
if a in B:
buckets.append(a)
Ответ №5:
buckets = []
A = ["apple", "pear", "orange"]
B = ["pear"]
for a in A:
if a in B:
buckets.append(a)