Python 创建大小为“n”的随机列表,其中包含来自另一个列表的元素
我想创建一个随机字符串,填充S和O。例如,我想要的输出如下:Python 创建大小为“n”的随机列表,其中包含来自另一个列表的元素,python,list,random,Python,List,Random,我想创建一个随机字符串,填充S和O。例如,我想要的输出如下: SSOSOOSO OSOOSSOS SSSOOSSO OSOSOSOO 在我的代码中,我会随机更改每一行,那么如何更改每一个位置呢 import random rows = 4 columns = 8 char_list = ['S', 'O'] for i in range(rows): print(random.choice(char_list) * columns) 我的当前输出: SSSSSSSS SSSSSS
SSOSOOSO
OSOOSSOS
SSSOOSSO
OSOSOSOO
在我的代码中,我会随机更改每一行,那么如何更改每一个位置呢
import random
rows = 4
columns = 8
char_list = ['S', 'O']
for i in range(rows):
print(random.choice(char_list) * columns)
我的当前输出:
SSSSSSSS
SSSSSSSS
OOOOOOOO
SSSSSSSS
可以使用第二个循环遍历每行中的每一列: 导入python 行数=4 列=8 字符列表=[S,O] 对于rangerows中的i: 行= 对于范围列中的j: 行+=random.choicechar\u列表 打印行
可以使用第二个循环遍历每行中的每一列: 导入python 行数=4 列=8 字符列表=[S,O] 对于rangerows中的i: 行= 对于范围列中的j: 行+=random.choicechar\u列表 打印行
将循环体更改为:
print("".join([random.choice(char_list) for i in range(columns)]))
这样,您就可以在列表的每个循环迭代中调用random.choicechar_list一次=每列每行调用一次,而不是像代码中那样每行只调用一次。将循环体更改为:
print("".join([random.choice(char_list) for i in range(columns)]))
这样,您就可以在列表理解的每个循环迭代中调用random.choicechar_list一次=每列每行调用一次,而不是像代码中那样每行只调用一次。与str.join和列表理解一起使用:
from random import choice
L = 8 # length of desired string
''.join([choice('OS') for x in range(L)])
与str.join和列表一起使用:
from random import choice
L = 8 # length of desired string
''.join([choice('OS') for x in range(L)])
使用numpy random.choice,因为它有一个概率选项,您可以为每个选项添加0.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')
使用numpy random.choice,因为它有一个概率选项,您可以为每个选项添加0.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')
对于Python 3.6+,只需使用random.choices即可实现这一点:
>>> import random
>>> char_list = ['S', 'O']
>>> random.choices(char_list, k=5)
['S', 'S', 'O', 'S', 'S']
有关更多详细信息,请参阅
因此,您的代码将成为:
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
对于Python 3.6+,只需使用random.choices即可实现这一点:
>>> import random
>>> char_list = ['S', 'O']
>>> random.choices(char_list, k=5)
['S', 'S', 'O', 'S', 'S']
有关更多详细信息,请参阅
因此,您的代码将成为:
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
您可以为每一行/每一列随机抽取索引,并使用其中一个字符加载索引,其余的字符加载索引。看起来你想让其中的一半填满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)
您可以为每一行/每一列随机抽取索引,并使用其中一个字符加载索引,其余的字符加载索引。看起来你想让其中的一半填满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)
啊@帖木儿·施塔特兰的类型比我快。萨达尼萨@帖木儿·施塔特兰的类型比我快。sadness代码中的*columns部分不会乘以random.choice的调用,而是单个调用的结果,这就是为什么行中的项是相同的。代码中的*columns部分不会乘以random.choice的调用,而是单个调用的结果,这就是为什么行中的项是相同的。