如何在Python中将复杂列表转换为字符串?

3

我有一个复杂的列表:

boundarylist = [('eː', 'n'), ('a', 'k'), ('a', 's')]

我想将boundarylist转换为字符串,以便将其存储在外部的 .txt 文件中。

boundarystring = ' '.join(boundarylist)

无法工作。输出应该类似于这样:
boundarystring = 'eːn ak as' #seperated by \s or \n

我尝试了在“”.join(list) if list contains a nested list in python?中提到的这些算法,但它们分别返回'eːnakas'和'eː n a k a s':

import itertools
lst = [['a', 'b'], ['c', 'd']]
''.join(itertools.chain(*lst))
'abcd'

并且

''.join(''.join(inner) for inner in outer)

3
可能是Python中包含嵌套列表的情况下使用join()函数的重复问题。 - Sayse
如果您想将其存储在文本文件中,然后轻松地将其取回,请考虑使用https://docs.python.org/3.5/library/pickle.html - castis
4个回答

7

您需要先将列表中的元组连接起来

>>> boundarylist = [('eː', 'n'), ('a', 'k'), ('a', 's')]
>>> ' '.join([''.join(w) for w in boundarylist])
'eːn ak as'
>>> 

2

一种方法:

boundarylist = [('eː', 'n'), ('a', 'k'), ('a', 's')]

print(' '.join([x+y for x, y in boundarylist]))
# eːn ak as

2
最简单的答案。 - RoadRunner
1
另外,使用两个连接比接受的答案性能更佳。 - Van Peer

-1

这是我尝试过的,通过列表和元组进行迭代;

boundarylist = [('eː', 'n'), ('a', 'k'), ('a', 's')]
new_list = []
for tuple_ in boundarylist:
   for i in tuple_:
      new_list.append(i)
boundarylist = ' '.join(new_list)
print(boundarylist)

输出的是 e: n a k a s,而不是 eːn ak as - Aran-Fey

-1
我们可以使用 reduce 方法来实现。
boundarylist = [('eː', 'n'), ('a', 'k'), ('a', 's')]
print reduce(lambda x,y:"".join(x) + " " + "".join(y) , boundarylist)

输出

'eːn ak as'

这是如何工作的

在这里,我们实际上是使用.join()方法连接列表中的元组,然后使用reduce()函数获取两个参数并使用空格字符" "将它们连接起来,以满足您的用例。


1
请不要使用reduce进行重复的字符串拼接,这会使代码难以阅读且效率低下。 - Aran-Fey
1
是的,这段代码难以阅读,但这取决于开发者。不过,就效率而言,它在其他示例中将行内连接字符串然后将其减少到常见字符串,而列表则首先迭代以加入元组,然后再次迭代以将元素与空格字符连接起来。我认为另一种方法是低效的,但如果@Aran-Fey因难以阅读而投反对票,那没关系。谢谢。 - Anand Tripathi
你的代码不包括打印语句时,每个循环需要1.5微秒±16.8纳秒(7次运行的平均值±标准差,每次1000000次循环)。被接受答案的代码每个循环需要842纳秒±8.83纳秒(7次运行的平均值±标准差,每次1000000次循环)。另外,你的代码只适用于Python 2。在Python3中,reduce已经移动到functools中。 - error

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