我正在尝试比较if语句中的两个字符串,但这给了我一个错误。为什么?

时间:2019-11-07 15:05:56

标签: python if-statement matrix

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。

在不认真更改项目设置方式的情况下,我该如何解决?

4 个答案:

答案 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