Python,生成随机括号字符串

3

我想生成随机长度和模式的方括号,例如,[] ][ [] ][ [] [[ ]] []。

目前,我的程序可以随机生成方括号,但是随机生成的次数不确定,因此,我的程序生成了以下结果:

[] [] [] [] [] []

[] [] []

[] [] [] [] []

这些方括号中没有任何随机性,只有显示的方括号数量是随机的。

我想知道如何使方括号的顺序随机,并且显示的方括号数量也是随机的。

下面是我的代码:

import random
import string

def randomGen(N):
    return random.randint(1,N)

char1 = '['
char2 = ']'
finalist = []
newList = []
newList2 = []

newValue = randomGen(99)

for i in range(newValue):
    newList = char1
    newList2 = char2
    finalist.append(newList + newList2)

for everChar in finalist:
    print everChar,

感谢您的选择。
4个回答

4
您可以使用random.sample来选择放置左括号的位置索引。然后在其他地方放置右括号:
In [119]: import random

In [122]: N = 10

In [125]: idx = set(random.sample(range(N), N//2))

In [126]: idx
Out[126]: {0, 1, 4, 5, 7}

In [127]: ''.join(['[' if i in idx else ']' for i in range(N)])
Out[127]: '[[]][[][]]'

鉴于您的示例,我假设您希望左右括号数量相等。如果不是这样,请使用jonrsharpe的解决方案。

4

你需要随机从这两个字符中选择一个;你可以在一行代码中完成:

 finallist = [random.choice('[]') for _ in range(random.randint(1, 99))]

你可以简化输出:
```html

您也可以简化输出:

```
print " ".join(finallist)

我刚刚运行的一个例子:

[ ] ] [ [ [ ] [ ] ] [

4
random.choice('[]') 可以很好地完成任务,并且在我看来更易读。 - lanzz
我更喜欢 "".join(random.choice('[]') for _ in range(random.randint(1, 99))) :) - thefourtheye
@thefourtheye 为什么要用一行代码?因为join()在列表上的速度更快,而不是生成器表达式。 - Grijesh Chauhan
@GrijeshChauhan 哦,是的,我最近才读到那篇文章。谢谢你提醒我 :) - thefourtheye

4

好的,如果您只想修复代码,您可以简单地执行以下操作:

finalist = list("".join(finalist))
random.shuffle(finalist)
for everChar in finalist:
    ...

如果您想获取更高效和更好的方法,请查看其他答案。

1
import random
import string

def randomGen(N):
    return random.randint(1,N)

length_to_generate = randomGen(99)
finalist = []
for i in range(length_to_generate):
    if random.randint(0, 1):
        finalist.append("[")
    else:
        finalist.append("]") 

for everChar in finalist:
    print everChar,

你也可以生成一个字符串而不是一个列表:
length_to_generate = randomGen(99)
finalist = ""
for i in range(length_to_generate):
    if random.randint(0, 1):
        finalist += "]"
    else:
        finalist += "["

print finalist

我已经通过朋友的帮助成功让我的程序运行了,但我也想让我的程序告诉用户结果是平衡还是不平衡。我的意思是 [ ] [ ] [ ](平衡)和 [ ] [ [ [ ] [ ](不平衡)。你有什么想法如何实现这个功能吗? - Baileyavfc

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接