-2

mylist が 70 個の要素のリストであるとしましょう。mylist から 0,12,5 個の要素をランダムに選択したいと思います。「rand:」で構文エラーが発生します。

rand = [0, 12, 5]
LL=[]
for x in enumerate(mylist) if i in rand:
        LL.append(x)        
4

3 に答える 3

6

それだけではない理由:

for i in rand:
   LL.append(mylist[i])

またはより良い:

LL = [mylist[i] for i in rand]

ただし、コードが明確に定義されていないことに注意してください。あなたが試みていたことは次のとおりだと思います:

LL = [ x for i,x in enumerate(mylist) if i in rand ]

これは機能しますが、元のリストの順序を維持する必要がない限り、列挙されたリスト全体を反復処理する必要はありません。

最後に、リストから N 個の要素をランダムに選択したい場合は、random.sampleが最適です。

import random
LL = random.sample(mylist,3)
于 2012-07-16T17:42:58.717 に答える
2

別のオプション:

from operator import itemgetter
LL = list(itemgetter(*rand)(mylist))
于 2012-07-16T17:47:26.283 に答える
1

別のオプション:

# just pick the items
from operator import itemgetter
print list(itemgetter(*rand)(mylist))

# pick 3 **actual** unique random items
from random import shuffle
shuffle(mylist)
print mylist[:3]

# Or as I've been reminded, and it preserves order of mylist (kudos @mgilson)
from random import sample
sample(mylist, 3)
于 2012-07-16T17:51:17.560 に答える