能做得更Python?

2024-09-28 20:57:41 发布

您现在位置:Python中文网/ 问答频道 /正文

这是我的密码:

for x in range(len(patterns)):
    for y in range(len(patterns[x])):
        patterns[x][y] = list(patterns[x][y])

它将其视为模式:

[['oxooo', 'oxoxo'], ['oxooo']]

并将其作为模式:

[[['o', 'x', 'o', 'o', 'o'], ['o', 'x', 'o', 'x', 'o']], [['o', 'x', 'o', 'o', 'o']]]

对我来说,看起来不像Python。能做得更好吗?输出应相同。你知道吗


Tags: in密码forlen模式rangelistpatterns
3条回答

在您的示例中,有两个级别的嵌套列表。如果总是这样,您可以使用列表理解:

[[list(p) for p in pp] for pp in patterns]

如果不知道有多少层,则需要使用递归函数,例如:

def expand_str(v):
    if isinstance(v, str): # basestring for python2
        return list(v)
    else: # assume that otherwise v is iterable
        return [expand_str(vv) for vv in v]

你在找什么。你知道吗

[[list(z) for z in y] for y in x]

下面是一个通用的递归解决方案,它可以实现列表中任意嵌套的字符串。你知道吗

def listify(x):
    if isinstance(x, str):
        return list(x)
    else:
        return [listify(i) for i in x]

>>> l = [['oxooo', 'oxoxo'], ['oxooo']]
>>> listify(l)
[[['o', 'x', 'o', 'o', 'o'], ['o', 'x', 'o', 'x', 'o']], [['o', 'x', 'o', 'o', 'o']]]

相关问题 更多 >