将列表转换为字符串列表python

Hyb*_*r1d 3 python string list

我是Python初学者无法理解我的头脑.如何更改例如a = [[1,2],[3,4],[5,6]]"12\n34\n56"字符串格式.

这是我得到的,但它与每个数字进入换行符.

def change(a):
    c = ""
    for r in a:
        for b in r:
            c += str(b) + "\n"
    return c
Run Code Online (Sandbox Code Playgroud)

pok*_*oke 12

但是每个号码都会进入换行符

那是因为你在每个数字之后而不是在每个子列表之后添加换行符r.如果你想要它,你应该在那里附加换行符:

c = ''
for r in a:
    for b in r:
        c += str(b)
    c += '\n'
return c
Run Code Online (Sandbox Code Playgroud)

但请注意,附加到字符串是非常低效的,因为它最终会创建大量的中间字符串.通常,您将创建一个列表,而不是您追加字符串部分,然后最终加入该列表以将其转换为单个字符串:

c = []
for r in a:
    for b in r:
        c.append(str(b))
    c.append('\n')
return ''.join(c)
Run Code Online (Sandbox Code Playgroud)

然后,您还可以使用列表表达式在多个步骤中缩短它们; 首先是内部列表:

c = []
for r in a:
    c.extend([str(b) for b in r])
    c.append('\n')
return ''.join(c)
Run Code Online (Sandbox Code Playgroud)

您可以先加入该列表理解:

c = []
for r in a:
    c.append(''.join([str(b) for b in r]))
    c.append('\n')
return ''.join(c)
Run Code Online (Sandbox Code Playgroud)

然后,您可以将换行符移动到外部联接中,并为外部列表创建新的列表解析:

c = [''.join([str(b) for b in r]) for r in a]
return '\n'.join(c)
Run Code Online (Sandbox Code Playgroud)

在那一点上,你也可以把它变成一个单行:

return '\n'.join([''.join([str(b) for b in r]) for r in a])
Run Code Online (Sandbox Code Playgroud)

正如Padraic在评论中指出的那样,加入换行字符也会阻止字符串有一个尾随\n,如果你继续在循环中添加它就会结束.否则,你可能以后习惯str.rstrip('\n')摆脱它.

  • 您的代码实际上给出了错误的结果,我得到了一个答案,因为您先回答了我已删除但您需要删除最后一个换行符或检查您的位置,如果您在最后一个分组时不添加换行符 (2认同)

fal*_*tru 7

使用str.join生成器表达式:

>>> a = [[1,2], [3,4], [5,6]]
>>> '\n'.join(''.join(map(str, xs)) for xs in a)
'12\n34\n56'
Run Code Online (Sandbox Code Playgroud)