所以,我需要将包含每个元素中包含2个元素的子列表的列表转换为单个字符串
我有什么:
[['A','B'],['C','D']]
我想要转换成什么:
"ABCD"
我试过了:
list=[['A','B'],['C','D']]
hello=""
for i in list:
hello=hello+i
print (hello)
说我有一个TypeError,我不明白为什么。
答案 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;作为变量名称,因为它已被类使用。