我是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
答案 0 :(得分:12)
但是每个号码都会进入换行符
这是因为您在每个数字之后而不是在每个子列表r
之后添加换行符。如果你想要它,你应该在那里附加换行符:
c = ''
for r in a:
for b in r:
c += str(b)
c += '\n'
return c
但请注意,附加到字符串是非常低效的,因为它最终会创建大量的中间字符串。通常,您将创建一个列表,而不是您追加字符串部分,然后最终加入该列表以将其转换为单个字符串:
c = []
for r in a:
for b in r:
c.append(str(b))
c.append('\n')
return ''.join(c)
然后,您还可以使用列表表达式在多个步骤中缩短它们;首先是内部列表:
c = []
for r in a:
c.extend([str(b) for b in r])
c.append('\n')
return ''.join(c)
您可以先加入该列表理解:
c = []
for r in a:
c.append(''.join([str(b) for b in r]))
c.append('\n')
return ''.join(c)
然后,您可以将换行符移动到外部联接中,并为外部列表创建新的列表解析:
c = [''.join([str(b) for b in r]) for r in a]
return '\n'.join(c)
在那一点上,你也可以把它变成一个单行:
return '\n'.join([''.join([str(b) for b in r]) for r in a])
正如Padraic在评论中指出的那样,加入换行字符也会阻止字符串有一个尾随\n
如果你继续在循环中添加它就会结束。否则,你可以使用str.rstrip('\n')
来消除它。
答案 1 :(得分:7)
将str.join
与generator expression一起使用:
>>> a = [[1,2], [3,4], [5,6]]
>>> '\n'.join(''.join(map(str, xs)) for xs in a)
'12\n34\n56'