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

リストからランダムな要素を削除する方法はいくつかあります。これが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 に答える