在列表列表中添加换行符

时间:2012-02-04 22:09:42

标签: python list list-comprehension

有人知道将列表列表转换成我在下面绘制的内容的语法吗?

列表列表如下:

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 个答案:

答案 0 :(得分:6)

总是可以使用两个显式迭代:

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

我现在无法想到任何更聪明的事。

答案 1 :(得分: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)

答案 2 :(得分: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])

答案 3 :(得分:0)

您可以使用对列表长度的索引进行理解

'\n'.join('%s %s' % (list[2 * i], list[2 * i + 1]) for i in [0:len(list)/2])

答案 4 :(得分:0)

首先,我正在使用zip()将您的列表分组为两组。然后,我在子列表上进行迭代,并使用join()将其元素与空格连接,将其添加到第一个元素,最后使用分隔线(\n)连接所有行。 / p>

>>> my_list = [0, [11, 1.2, 'str1'], 1, [21, 2.2, 'str2'], 2, [31, 3.2, 'str3'] ]
>>> it = iter(my_list)
>>> my_str = '\n'.join((str(x) + ' ' + ' '.join(str(y) for y in l)) for x, l in zip(it, it))
>>> print my_str
0 11 1.2 str1
1 21 2.2 str2
2 31 3.2 str3

此解决方案适用于列表和子列表中的任何类型。

答案 5 :(得分:0)

如果你的列表确实具有那个确切的结构(偶数位置的非列表元素,奇数位置的列表元素),你可以这样做:

def pairs(l):
    i = iter(l)
    while 1:
        yield (i.next(), i.next())
print '\n'.join(['%s %s' % (f, ' '.join(s)) for f, s in pairs(list)])

答案 6 :(得分:0)

您可以使用标准"grouper" idiom以块(一次两个项目)遍历列表:

L = [0, ['~', '~', '~'], 1, ['~', '~', '~'], 2, ['~', '~', '~']]
print('\n'.join("%s %s" % (i, ' '.join(lst)) for i, lst in zip(*[iter(L)]*2)))
Output
0 ~ ~ ~
1 ~ ~ ~
2 ~ ~ ~

答案 7 :(得分:0)

不使用索引并且不创建列表或子列表:

lst = [0, ['~', '~', '~'], 1, ['~', 889, '~'], 2, ['~', '~', ('a','b')], 3, ['#', '#'] ]

it = iter(lst)
print '\n'.join( '%s %s' % (x,' '.join(str(u) for u in next(it))) for x in it)

结果

0 ~ ~ ~
1 ~ 889 ~
2 ~ ~ ('a', 'b')
3 # #