簡體   English   中英

創建大小為“n”的隨機列表,其中包含另一個列表中的元素

[英]Create random list of size "n" containing elements from another list

我想創建用“S”和“O”填充的隨機字符串。 例如,我想要的 output 是這樣的:

SSOSOOSO
OSOOSSOS
SSSOOSSO
OSOSOSOO

使用我的代碼,我每行隨機更改,那么每 position 更改一次的方法是什么?

import random

rows = 4
columns = 8
char_list = ['S', 'O']

for i in range(rows):
    print(random.choice(char_list) * columns)

我現在的output:

SSSSSSSS
SSSSSSSS
OOOOOOOO
SSSSSSSS

將循環體更改為:

print("".join([random.choice(char_list) for i in range(columns)]))

這樣,您在列表理解的每個循環迭代中調用random.choice(char_list)一次(=每行每列一次),而不是像您的代碼中那樣每行只調用一次。

對於 Python 3.6+,您可以簡單地使用random.choices()來實現:

>>> import random
>>> char_list = ['S', 'O']

>>> random.choices(char_list, k=5)
['S', 'S', 'O', 'S', 'S']

有關詳細信息,請參閱“random.choices()”文檔


因此你的代碼將變成:

import random

rows = 4
columns = 8
char_list = ['S', 'O']

for i in range(rows):
    print(''.join(random.choices(char_list, k=columns)))

# Output:
# SSOSSSSO
# OOSOSOOO
# SSSOOOOO
# OOOOSSSS

您可以在每一行的每一列中使用第二個循環到 go:

import python


rows = 4
columns = 8
char_list = ["S", "O"]

for i in range(rows):
    row = ""
    for j in range(columns):
        row += random.choice(char_list)
    print(row)

使用random.choice()與 str.join() 和列表理解:

from random import choice
L = 8  # length of desired string
''.join([choice('OS') for x in range(L)])

使用 numpy random.choice 因為它有一個概率選項,你可以為每個選項添加 5,然后重塑。

from numpy.random import choice
choice(['S','O'], 32,
              p=[.5,.5]).reshape((8,4))


array([['O', 'S', 'S', 'O'],
       ['S', 'S', 'S', 'S'],
       ['S', 'S', 'O', 'S'],
       ['O', 'O', 'O', 'S'],
       ['S', 'O', 'O', 'S'],
       ['O', 'O', 'O', 'S'],
       ['O', 'O', 'O', 'O'],
       ['O', 'S', 'S', 'O']], dtype='<U1')

您可以為每一行/列抽取隨機索引,並用其中一個字符加載它們,其余的則加載其他字符。 似乎您希望其中一半用 S 填充,另一半用 O 填充。

可以完成類似以下的操作——這實際上非常簡單。 然而,使用 numpy 庫有更有效的方法:

import random

result = []
for i in range(rows):
    indx = random.sample(range(1,columns),columns//2)
    singleRow = []
    for j in range(columns):
        if j in indx:
             singleRow.append('S')
        else:
             singleRow.append('O')
    result.append(singleRow)


暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM