我有一个与数组对应的列表列表(列表中的每个列表都有相同的条目数):
a = [[1,2,3],[4,5,6],[7,8,9]]
我想将其转换为单个字符串:
"1,4,7\t2,4,8\t3,6,9"
即使每列成为逗号分隔的a
字符串值列表。我的numpy数组解决方案非常糟糕:
b = array(b)
l = len(a)
result = "\t".join([",".join(map(str, b[:,r])) for r in range(l)])
有更优雅的方式吗?谢谢。
答案 0 :(得分:8)
您可以使用zip()
转换列表列表:
>>> zip(*a)
[(1, 4, 7), (2, 5, 8), (3, 6, 9)]
其他一切都很简单:
>>> "\t".join(",".join(map(str, r)) for r in zip(*a))
'1,4,7\t2,5,8\t3,6,9'
答案 1 :(得分:3)
使用zip()功能获取
>>> a = [[1,2,3],[4,5,6],[7,8,9]]
>>> zip(*a)
[(1, 4, 7), (2, 5, 8), (3, 6, 9)]
>>>
而不是你的事。
>>> a = [[1,2,3],[4,5,6],[7,8,9]]
>>> b = zip(*a)
>>> result = "\t".join([",".join(map(str, r)) for r in b])
>>> result
'1,4,7\t2,5,8\t3,6,9'
>>>
答案 2 :(得分:2)
你可以用这样的numpy来更快地做到这一点:
>>> a = numpy.array([[1,2,3],[4,5,6],[7,8,9]])
>>> import StringIO
>>> s = StringIO.StringIO()
>>> numpy.savetxt(s, a.T, fmt="%d", delimiter=",", newline="\t")
>>> s.getvalue()
'1,4,7\t2,5,8\t3,6,9\t'
这不需要分配额外的内存来复制数组,因为.T
返回数组的视图,而不是副本。 Numpy的savetext函数也应该比在python中执行此操作更快。
答案 3 :(得分:0)
zip()
已经有更好的解决方案,但这也可以解决问题:
>>> '\t'.join(','.join(str(b[j]) for b in a) for j in range(len(a)))
'1,4,7\t2,5,8\t3,6,9'