在列表中的列表中添加换行符

1 投票
8 回答
1954 浏览
提问于 2025-04-17 12:21

有没有人知道怎么把一个包含多个列表的列表,变成我下面画的那种样子?

这个包含多个列表的列表看起来是这样的:

list = [0, [~, ~, ~], 1, [~, ~, ~], 2, [~, ~, ~] ]

而我想要的输出结果是:

0 ~ ~ ~
1 ~ ~ ~
2 ~ ~ ~   

我看到其他人问过类似的问题,不过他们的子列表里只有一个元素,而且每个子列表前面也没有整数元素,所以他们用下面的代码来得到我需要的结果:

"\n".join(item[0] for item in list)

我不太确定怎么修改上面的代码来解决我具体的问题。我试着改过:

item[0] to item[0:len(sub_list)] 

还有很多其他的尝试,但都没有成功。(我对Python还不太熟悉)

如果有人能帮忙,我会非常感激。谢谢。

8 个回答

1

首先,我们来纠正一下这个定义:

lst = [0, ['~', '~', '~'], 1, ['~', '~', '~'], 2, ['~', '~', '~']]

请记住,千万不要把 list 用作变量名。这样会覆盖掉内置的 list 函数。

为了让这个更容易处理,可以把它转换成一个简单的列表的列表:

lst = [[lst[i]] + lst[i+1] for i in xrange(0, len(lst), 2)]

然后用 join 把它连接起来:

print "\n".join([" ".join(map(str, x)) for x in lst])
2

虽然没有其他回答那么聪明或简洁,但绝对容易理解:

# This function is taken from 
# http://stackoverflow.com/questions/312443/how-do-you-split-a-list-into-evenly-sized-chunks-in-python
def chunks(l, n):
    """ Yield successive n-sized chunks from l.
    """
    for i in xrange(0, len(l), n):
        yield l[i:i+n]

my_list = [0, ['~', '~', '~'], 1, ['~', '~', '~'], 2, ['~', '~', '~'] ]

paired = chunks(my_list, 2)

for index, lst in paired:
    print index, ' '.join(lst)
6

你可以总是通过每次跳过一个来进行明确的循环:

el = [0, ['~', '~', '~'], 1, ['~', '~', '~'], 2, ['~', '~', '~'] ]
for i in range(0, len(el), 2):
    print el[i], " ".join(el[i+1])

我现在想不出更聪明的方法了。

撰写回答