如何将多种类型的列表附加到单个字符串(python)

问题描述 投票:5回答:4

如果我有这样的清单:

arr = [
         ["Hi ", "My ", "Name "],
         ["Is ", "Sally. ", "Born "],
         [3, 13, 2010]  
]

你怎么会在一个声明的单个字符串中得到它

H, My Name Is Sally. Born 3 13 2010

有比这更简单的方法

example = ""
for x in range(len(arr)): 
    for j in range(len(arr[x])):
        example = example + str(arr[x][j])
print (example) 
python string list
4个回答
5
投票

你可以使用' '.join

myList = [
     ["Hi ", "My ", "Name "],
     ["Is ", "Sally. ", "Born "],
     [3, 13, 2010]  
] 

sentence = ''.join(str(i)+[' ', ''][type(i) == str] for b in myList for i in b)[:-1]

输出:

'Hi My Name Is Sally. Born 3 13 2010'

1
投票

你可以使用itertools.chain

import itertools as it
''.join(map(str, it.chain(*arr)))

编辑:

我刚注意到OP需要数字之间的空格。所以它应该是:

''.join(map(lambda s: s if isinstance(s, str) else str(s)+' ', it.chain(*arr))).rstrip()

1
投票

liliscent's回答的启发,这里是整数到字符串转换后带有空格的解决方案:

import itertools as it

''.join([el if isinstance(el, str) else str(el) + ' ' for el in it.chain(*arr)]).rstrip()

0
投票

如果放在一行:

res = " ".join(map(lambda lst: " ".join(map(lambda i: str(i).strip(), lst)), myList))

分解:

最后一个列表仅包含整数。如果转换为字符串,它们将不会像以前的列表一样在后面有额外的空白区域。

因此,对于我所做的三个子列表中的每一个:map(lambda i: str(i).strip(), lst),其中strip()函数用于移除字符串前面和后面的空白区域,类似于java中的trim()函数。

然后" ".join()函数将所有值连接到字符串列表中,并成为一个新字符串,其中原始列表中的元素由" "分隔。

因此,将三个子列表中的每一个映射到字符串值,然后再次加入。

© www.soinside.com 2019 - 2024. All rights reserved.