请考虑以下示例:
random_tile = random.choice(tiles)
del random_tile
首先将列表tiles
中的随机元素分配给变量,然后在该变量上调用函数。
然后,如果我们想按如下方式缩短代码:
del random.choice(tiles)
我们会得到SyntaxError: can't delete function call
。我试了eval()
没有运气。怎么解决这个问题?
修改
我要做的是随机删除tiles
列表中的元素。我认为除了使用random.randint()
作为索引之外,我发现了一种更紧凑的方式,但我猜不是。
是否有这样做的pythonic /传统方式?
答案 0 :(得分:5)
del
不是函数,而是创建del statements的关键字,例如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]
答案 1 :(得分:2)
如果您尝试实际修改tiles
列表,则您的第一次尝试也不会这样做。它只是分配给你的变量,然后擦除那个变量。这是因为del
适用于变量本身,而不是它所指向的变量。大多数其他函数对某些变量指向的值起作用。因此,除非您确实需要使用del
,否则您尝试做的事情会正常。
此外,如果您尝试使用del
,我很确定您使用的是错误的。如果你详细说明你想要做什么,我们可以帮助你。
答案 2 :(得分:1)
有很多方法可以从列表中删除随机元素。这是一个。
>>> import random
>>> my_list = [1, 2, 3, 4, 5]
>>> my_list.remove(random.choice(my_list))
>>> my_list
[1, 2, 4, 5]
答案 3 :(得分:0)
给定一个列表tiles
,这就可以解决问题:
import random
tiles.remove(random.choice(tiles))