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

时间:2018-02-27 19:58:05

标签: python string list

如果我有这样的清单:

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) 

4 个答案:

答案 0 :(得分: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 :(得分: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()

答案 2 :(得分:1)

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

import itertools as it

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

答案 3 :(得分:0)

如果放在一行:

SELECT 
    CASE WHEN 
        DATE_TRUNC('MONTH', ABSTIME(start_ts)) = DATE_TRUNC('MONTH', CURRENT_DATE) 
    THEN 'current'
    ELSE
        TO_CHAR(ABSTIME(start_ts), 'YYYY-MM-DD')
    END, * 
FROM widgets limit 10

分解:

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

因此,对于我所做的三个子列表中的每一个: res = " ".join(map(lambda lst: " ".join(map(lambda i: str(i).strip(), lst)), myList)) ,其中map(lambda i: str(i).strip(), lst)函数用于删除字符串前后的空格,类似于java中的strip()函数。

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

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