itemsInExistence = []
#items are put into this matrix in a save function
#Ex. ['Sword Mk II', 4, 4]
gains = random.randint(1, 3)
if gains == 2:
gained_weapon = random.choice(itemsInExistence)
print("You gained the item", gained_weapon)
itemMatrix.append(gained_weapon)
for i in itemsInExistence:
if gained_weapon == itemsInExistence[i]:
del itemsInExistence[i]
break
它一直给我错误:
如果gain_weapon == itemsInExistence [i]:
TypeError:列表索引必须是整数或切片,而不是str。
在不认真更改项目设置方式的情况下,我该如何解决?
答案 0 :(得分:1)
我建议进行以下更改:
for item in itemsInExistence:
if gained_weapon == item:
itemsInExistence.remove(item)
break
(假设itemsInExistence
是字符串列表),您可以通过简单地做得到相同的效果:
itemsInExistence.remove(gained_weapon)
即使您只想删除一项,也不必遍历整个列表...
答案 1 :(得分:1)
您获取值“ i ”的方式存在问题。
当您在项目循环中使用“ 用于项目中的我 ”时,会得到“ i = firstItem ”,然后是“ i = secondItem ”,依此类推...
如果您需要使用索引遍历列表,请使用以下模式:
for i in range( 0, len(myList) ):
if gained_weapon == myList[i]:
...statements...
修订后的工作代码:
import random
itemsInExistence = ['Sword Mk II', 4, 4]
#items are put into this matrix in a save function
#Ex. ['Sword Mk II', 4, 4]
gains = random.randint(1, 3)
print('gains: '+ str(gains) )
if gains == 2:
gained_weapon = random.choice(itemsInExistence)
print("You gained the item:", gained_weapon)
itemMatrix = []
itemMatrix.append(gained_weapon)
for i in range(0,len(itemsInExistence)):
print('i: ' + str(i) )
if gained_weapon == itemsInExistence[i]:
print('items matched')
del itemsInExistence[i]
print(itemsInExistence)
break
我是SO的新手,请告诉我是否可以改善此答案。 如果我有帮助,请不要忘记赞。
答案 2 :(得分:0)
如Python文档所述
Python中的for语句与您在C或Pascal中使用的语句有些不同。 Python的for语句不是在数字的算术级数上总是进行迭代(例如在Pascal中),也不是让用户能够定义迭代步骤和暂停条件(如C),而是对任何序列的项(列表或列表)进行迭代。字符串),按照它们在序列中出现的顺序。
哪个是当您遍历列表itemsInExistence
时,它不会给您theat元素的索引为i
,而是元素本身。因此,您基本上可以将其更改为if gained_weapon == i:
。您还会为del itemsInExistence[i]
遇到错误,但是在这种情况下,您不能使用del i
从列表中删除该元素。相反,您可以使用list.remove()
方法。 See the docs here.
答案 3 :(得分:0)
如果您希望索引与项目一起使用,则应使用enumerate()
。
for i in itemsInExistence:
if gained_weapon == itemsInExistence[i]:
del itemsInExistence[i]
break
应该成为
for i, item in enumerate(itemsInExistence):
if gained_weapon == itemsInExistence[i]:
del itemsInExistence[i]
break