2017-05-29 2 views
0

私は楽しいために書いてきたPythonコードの一部を探しています。面倒なコードはこうです:変数を使用して、印刷するセットの値を決定する

v = randint(1,7) 
if v != 7: 
    d = randint(1,5) 
    if d == 1: 
     print(vdset[v], file=text_file) 

私の目的は、randintを使って自分のセットからランダムな値を選択することですが、実行するとエラー'set' object does not support indexingが発生します。私はsetの使用を別のものに置き換える必要があると考えていますが、何がうまくいくのかは分かりません。

+0

セットは順序付けされていないため、索引付けすることはできません。代わりにリストを使用することができます。 –

+0

シーケンスからランダムな要素を選ぶのは、ちょうど 'random.choice()'を使うのが最適です。あなたはまだリストやタプルが必要です。 –

+0

あなたが本当に 'vdset'に結婚している場合、' vdset [v] 'を書くことができます。 –

答えて

0

問題は、セットが一意の要素の順序付けられていないコレクションであることです。あなたはPythonのためdata structureを見ている必要があります:

あなたが試すことができます。

v = randint(1,7) 
    if v != 7: 
     d = randint(1,5) 
     if d == 1: 
      print(list(vdset)[v], file=text_file) 
0

ます。またrandom.choiceを使用することができます。これは、セットがインデックス作成をサポートしていない場合でも、セットをリストに変換するだけで(インデックス作成をサポートする)同じ問題を抱えています。

>>> from random import choice 
>>> my_set = {1, 3, 2, 7, 5, 4} 
>>> choice(my_set) 
Traceback (most recent call last): 
... 
TypeError: 'set' object does not support indexing 
>>> choice(list(my_set)) 
3 
関連する問題