2016-06-20 16 views
1

:2つのかのう成果」からの手紙を含むリスト:n個のコインのとりうる組み合わせのリストは、私はこのコードを実行したときに、私は何を得るPythonのリスト型リスト連結、ランダムモジュール

を反転させます頭 "と"尾 "。どうして?私は理解できませんでした。

def randomlist(n): 
l = [] 
for i in range(n): 
    a = random.randint(1,2) 
    if a == 1: 
     l[len(l):] = ("heads") 
    else: 
     l[len(l):] = ("tails") 
return l 


listy = randomlist(20) 

print(listy) 
+0

彼らはこの種の割り当てをどこかに求めていますか?別のスライス割り当て[数分後]を見ました(http://stackoverflow.com/q/37927386/4099593)。 –

+0

'(" heads ")'はタプルではなく文字列であり、そのスライス割り当ては個々の文字を区切る 'l.extend(" heads ")'と等価であることに注意してください。 –

答えて

2

スライス割り当ての代わりにappendを使用してください。

def randomlist(n): 

    l = [] 
    for i in range(n): 
     a = random.randint(1,2) 
     if a == 1: 
      l.append("heads") 
     else: 
      l.append("tails") 
    return l 
+0

働いてくれてありがとう! –

0

nコインのランダムなリストに反転を生成するために、あなたはまた、より簡潔な方法で同じロジック表現するlist comprehensionを使用することができます。上記のコードで

>>> import random 
>>> 
>>> def randomlist(n): 
...  return ["heads" if random.randint(0, 1) else "tails" 
...    for _ in range(n)] 
... 
>>> randomlist(10) 
['tails', 'tails', 'tails', 'tails', 'heads', 'heads', 'heads', 'tails', 'tails', 'heads'] 
>>> randomlist(6) 
['heads', 'tails', 'heads', 'heads', 'heads', 'heads'] 

を、ランダムな整数0または"heads"または"tails"の間で0を計算すると0をFalseとし、1をTrueとすると、(1または2とは対照的に)1が生成されます。あなたの目的は、コインにn回ひっくり返すのすべての可能の結果を生成する場合

さて、あなたはitertools.productを使用することができます。 n=3のための一例(読みやすくするために短縮され、最終的な出力):

>>> from itertools import product 
>>> all_outcomes = product(("heads", "tails"), repeat=3) 
>>> list(all_outcomes) 
[('heads', 'heads', 'heads'), ('heads', 'heads', 'tails'), ...] 
0

またitertoolsライブラリを使用することができます。それはそれのように本当に簡単になります。

>>> from itertools import product 
>>> product(['heads','tails'], repeat=3) # change the repeat parameter to set the length 
<itertools.product object at 0x0000000003B715A0> 
>>> import random 
>>> list(_)[random.randint(0,len(_))] # get a random sequence 
('heads', 'tails', 'heads') 

これは、多数のシーケンスをすばやく生成する必要がある場合に便利です。 productの結果を変数に保存して、そこからランダムなインデックスを取得してください。

関連する問題