在没有括号的列表中打印多个列表

时间:2014-03-07 16:08:45

标签: python list join printing

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)))

我的问题是:

  1. 为什么CODE2因添加另一个列表而失败?
  2. 有人可以告诉我CODE3实际上在做什么吗? (即一步一步)
  3. 谢谢!

3 个答案:

答案 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)时,它依赖于liststr的每个项目。这就是为什么'sequence item 0'引用list中的项目而不是list本身的原因。考虑到这一点,您不能join两个列表。

CODE3 只需将序列x中的所有项目转换为字符串,即可生成 list字符串

您也可以这样做,而不是CODE3:

[''.join(l) for l in grid2]  # This is called a list comprehension.