无法将包含每个元素中包含2个元素的子列表的列表转换为单个字符串

时间:2016-12-03 10:37:47

标签: python python-3.x

所以,我需要将包含每个元素中包含2个元素的子列表的列表转换为单个字符串

我有什么:

[['A','B'],['C','D']]

我想要转换成什么:

"ABCD"

我试过了:

list=[['A','B'],['C','D']]

hello=""

for i in list:

     hello=hello+i

print (hello)

说我有一个TypeError,我不明白为什么。

5 个答案:

答案 0 :(得分:4)

您有一个可迭代的列表,以及pythonic方式,使用itertools.chain.from_iterable展平您的列表,然后使用str.join()方法加入字符:

In [12]: from itertools import chain

In [13]: lst = [['A','B'],['C','D']]

In [14]: ''.join(chain.from_iterable(lst))
Out[14]: 'ABCD'

以下是使用两个join的基准,这表明itertools方法快2倍

In [19]: %timeit ''.join(chain.from_iterable(lst))
10000 loops, best of 3: 114 µs per loop

In [20]: %timeit ''.join(''.join(w) for w in lst)
1000 loops, best of 3: 250 µs per loop

答案 1 :(得分:3)

  

说我有一个TypeError,我不明白为什么

你得到的错误非常详细: TypeError:无法将'list'对象隐式转换为str ,这意味着你不能隐式地将列表对象与像{这样的字符串对象连接起来{1}}

另一方面,您可以连接列表,在简单的情况下,此[1,2] + "hello"也会提供预期结果''.join(list[0]+list[1])

使用ABCD函数(或加入str.join(iterable)函数,该函数应该更快):

itertools.chain.from_iterable

输出:

l = [['A','B'],['C','D']]
hello = ''.join(''.join(w) for w in l)

print(hello)

https://docs.python.org/3.5/library/stdtypes.html?highlight=join#str.join

答案 2 :(得分:2)

试试这个

sampleData = [['A','B'],['C','D']]
output = "".join( "".join(i) for i in sampleData)
print (output)

sampleData = [['A','B'],['C','D']]
output = ""
for i in sampleData:
    output += "".join(i)
print (output)

输出

ABCD

您正在尝试添加列表和字符串

时出现的错误

答案 3 :(得分:2)

您只需拨打str.join()一次并使用列表理解即可完成此操作:

''.join([char for element in [['A', 'B'], ['C', 'D']] for char in element])

输出:

'ABCD'

答案 4 :(得分:0)

TypeError是您将子列表 i 添加到字符串 hello 的操作的结果。我相信这是因为类型列表和str之间不支持该操作,如以下示例所示:

['a', 'b']+'2'
Traceback (most recent call last):
  File "<input>", line 1, in <module>
TypeError: can only concatenate list (not "str") to list

'2'+['a', 'b']
Traceback (most recent call last):
  File "<input>", line 1, in <module>
TypeError: Can't convert 'list' object to str implicitly

上面有各种答案推荐替代代码并使用&#34; join&#34;方法。然而,我虽然包括一个使用纯循环的替代方案:

l = [['A','B'],['C','D']]

hello = ""
for sublist in l:
    for element in sublist:
        hello += str(element)
print(hello)

请注意,这可能比其他方法慢。 另外我建议不要使用&#34; list&#34;作为变量名称,因为它已被类使用。