使用“if”从列表中删除项目会产生语法错误

时间:2018-01-06 22:48:11

标签: python pygame

所以我试图编写一些包含敌人列表的代码,然后删除敌人,如果他们离开屏幕。代码如下:

for enemy in enemies:
    index = 0
    enemy[0] += 2
    if enemy[1] >= 270:
        enemy[2] = -2
    else:
        enemy[2] = enemy[2] + 0.01
    enemy[1] = enemy[1] + enemy[2]
    screen.blit(enemyImg, (enemy[0],enemy[1])

    if enemy[0] > 470:
        enemies.remove(index)
    index += 1

我正在使用for循环,这就是为什么它有“敌人”作为列表,但它正在删除列表中的项目“敌人”

存储在“敌人”中的信息是具有x值(索引0),y值(索引1)和y速度(索引2)的列表。敌人没有x速度,因为它们以恒定的速率向右移动。

错误表示语法无效(字面意思是它所说的全部),但我没有看到问题。也许我只是错过了一些愚蠢的东西,但我不确定。感谢您提供任何帮助。

2 个答案:

答案 0 :(得分:2)

当项目大于470时,您可以从名为enemies的列表中删除项目。

enemies = [2,500,1,2,4000]
for enemy in enemies:
    if enemy > 470:
        enemies.remove(enemy)

如果你想使用列表理解(更简洁的代码)来做这件事,你可以这样做:

[enemies.remove(enemy) for enemy in enemies if enemy > 470]

答案 1 :(得分:1)

如果要过滤现有列表,通常最好创建一个新列表,然后将其分配给旧变量名称。您可以使用list comprehension

在一行中执行此操作
m1: x1+x2+x3

m2: x1*x2+x3

m3: x1*x3+x2

m4: x2*x3+x1

m5: x1*x2+x1*x3

m6: x1*x2+x2*x3

m7: x1*x3+x2*x3

m8: x1*x2*x3

这是一个可能更接近您的代码的示例。

>>> enemies = [600, 50, 700, 95, 800, 900, 1000]
>>> enemies = [x for x in enemies if x < 470]
>>> enemies
[50, 95]