![](/img/trans.png)
[英]Python: List comprehension to create a list strings of n-size maximum from list of strings of random size
[英]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.