1

考虑下面的例子:

random_tile = random.choice(tiles)
del random_tile

它首先将列表中的一个随机元素分配tiles给一个变量,然后对该变量调用一个函数。

那么如果我们要缩短代码如下:

del random.choice(tiles)

我们会得到一个SyntaxError: can't delete function call. 我试过eval()没有运气。如何解决?

编辑:

我想做的是从tiles列表中随机删除一个元素。我以为我找到了一种比用作索引更紧凑的方法random.randint(),但我想不是。

否则有没有一种pythonic/传统的方式来做到这一点?

4

4 回答 4

5

del不是函数,它是创建del 语句的关键字,例如del var. 您不能将其用作函数或函数,它只能应用于变量名、变量名列表或订阅和切片,例如

del a
del a,b
del l[0]
del l[:]

要删除随机项目,您可以试试这个

random_tile.remove(random.choice(tiles))

它不是删除项目的最佳方法,因为它可能意味着对项目和项目比较的内部搜索,如果项目不是唯一的也将不起作用,所以最好是获取随机索引并删除它

index = random.randint(0, len(l)-1)
del l[index]
于 2012-10-29T20:12:48.610 回答
2

如果您尝试实际修改您的tiles列表,那么您的第一次尝试也不会这样做。它只是分配给您的变量,然后擦除该变量。那是因为del适用于变量本身,而不是它指向的内容。大多数其他函数对某些变量指向的值起作用。因此,除非您确实需要使用del,否则您尝试做的事情将正常工作。

另外,如果您尝试使用del,我很确定您使用错误。如果您详细说明您正在尝试做什么,我们可能会帮助您。

于 2012-10-29T20:16:09.887 回答
1

有多种方法可以从列表中删除随机元素。这是一个。

>>> import random
>>> my_list = [1, 2, 3, 4, 5]
>>> my_list.remove(random.choice(my_list))
>>> my_list
[1, 2, 4, 5]
于 2012-10-29T20:28:50.903 回答
0

给定一个列表tiles,这可以解决问题:

import random
tiles.remove(random.choice(tiles))
于 2012-10-29T20:28:38.883 回答