CODE1:它有效,输出为123。
grid1=['1','2','3']
test=''.join(grid1)
print(test)
CODE2:我修改了它,它失败了,抛出下面列出的错误信息。
grid2 = [
['1','2','3'],
['4','5','6']
]
test=''.join(grid2)
print(test)
错误
Traceback (most recent call last):
File "C:/Users/V/Desktop/0 Python/GridTEST.py", line 10, in <module>
test=''.join(grid2)
TypeError: sequence item 0: expected str instance, list found
CODE3:我做了一些挖掘,并通过以下方式找到了我的问题的解决方案。
for x in grid2:
print (''.join(map(str, x)))
我的问题是:
谢谢!
答案 0 :(得分:0)
您不能join
两个列表作为字符串 - 您只能join
个字符串。 code3
的作用是从迭代的内部列表中提取字符串值。内部列表包含字符串,外部列表包含列表 - 这就是为什么你不能将它们join
作为字符串。
for x in grid2:
test = ''.join(x)
也会'工作'(除了test
会被覆盖第二次迭代。
答案 1 :(得分:0)
您需要知道的是,separator.join(iterable)
要求iterable
是一系列字符串。然后它返回一个新字符串,iterable
中的所有字符串都与字符串separator
连接。
为什么CODE2失败并添加另一个列表?
CODE2失败,因为iterator
是一系列列表,而不是字符串序列。
有人可以告诉我CODE3实际上在做什么吗? (即一步一步)
CODE3的呈现方式不对。它应该是:
for x in grid2:
print (''.join(map(str, x)))
循环遍历grid2
中的元素。每个元素都是一个字符串列表,对吧? x
是循环变量。因此,在每次迭代中,x
是一个字符串列表。 map(str, x)
将函数str()
应用于x
中的所有元素,并返回一个新列表。 CODE3基本上执行CODE1正在执行的操作,仅针对每个子列表。
答案 2 :(得分:0)
CODE2 在添加其他列表时失败,因为当您执行sep.join(my_list)
时,它依赖于list
中str
的每个项目。这就是为什么'sequence item 0'
引用list
中的项目而不是list
本身的原因。考虑到这一点,您不能join
两个列表。
CODE3 只需将序列x
中的所有项目转换为字符串,即可生成新 list
字符串
您也可以这样做,而不是CODE3:
[''.join(l) for l in grid2] # This is called a list comprehension.