list[s]
是一個字符串。爲什麼這不起作用?TypeError:列表索引必須是整數,而不是str Python
出現以下錯誤:
TypeError: list indices must be integers, not str
list = ['abc', 'def']
map_list = []
for s in list:
t = (list[s], 1)
map_list.append(t)
list[s]
是一個字符串。爲什麼這不起作用?TypeError:列表索引必須是整數,而不是str Python
出現以下錯誤:
TypeError: list indices must be integers, not str
list = ['abc', 'def']
map_list = []
for s in list:
t = (list[s], 1)
map_list.append(t)
list1 = ['abc', 'def']
list2=[]
for t in list1:
for h in t:
list2.append(h)
map_list = []
for x,y in enumerate(list2):
map_list.append(x)
print (map_list)
輸出:
>>>
[0, 1, 2, 3, 4, 5]
>>>
這正是你想要的。
If you dont want to reach each element then:
list1 = ['abc', 'def']
map_list=[]
for x,y in enumerate(list1):
map_list.append(x)
print (map_list)
輸出:
我downvoted蟒蛇的陰影,因爲這並不能解釋爲什麼原來的代碼沒有工作或OP的理解錯誤在哪裏。 – SethMMorton
它應該是:
for s in my_list: # here s is element of list not index of list
t = (s, 1)
map_list.append(t)
我想你想:
for i,s in enumerate(my_list): # here i is the index and s is the respective element
t = (s, i)
map_list.append(t)
enumerate
給指數和元素
注意:使用list作爲變量名是不好的做法。其內置功能
請勿使用名稱list
作爲列表。下面我使用了mylist
。
for s in mylist:
t = (mylist[s], 1)
for s in mylist:
分配的mylist
元件s
s
即發生在第二次迭代中在第一次迭代的值「ABC」和「DEF」。因此,s
不能用作mylist[s]
中的索引。
相反,簡單地做:
for s in lists:
t = (s, 1)
map_list.append(t)
print map_list
#[('abc', 1), ('def', 1)]
當你遍歷一個列表,循環變量接收實際的列表元素,而不是他們的索引。因此,在您的示例s
是一個字符串(首先abc
,然後def
)。
它看起來像你想做什麼本質上是這樣的:
orig_list = ['abc', 'def']
map_list = [(el, 1) for el in orig_list]
這是使用所謂的list comprehension一個Python構造。
for s in list
將產生列表中的項目而不是它們的索引。所以s
將爲'abc'
第一個循環,然後 'def'
。 'abc'
只能是字典的關鍵字,而不是列表索引。
與t
一致通過索引獲取項目在Python中是多餘的。
請不要使用名單的名字,它的內置 – Anzel