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

Python 在列表列表中添加换行符,python,list,list-comprehension,Python,List,List Comprehension,有人知道把一个列表变成我下面画的东西的语法吗 列表列表如下所示: list = [0, [~, ~, ~], 1, [~, ~, ~], 2, [~, ~, ~] ] 这是期望的输出: 0 ~ ~ ~ 1 ~ ~ ~ 2 ~ ~ ~ 我见过其他人问过类似的问题,但是他们的子列表只有一个元素,每个子列表前面也没有整数元素,因此他们使用以下方法来获得我需要的结果: "\n".join(item[0] for item in list) 我不确定如何操作上述代码行来解决我的特定问题。我试着

有人知道把一个列表变成我下面画的东西的语法吗

列表列表如下所示:

list = [0, [~, ~, ~], 1, [~, ~, ~], 2, [~, ~, ~] ]
这是期望的输出:

0 ~ ~ ~
1 ~ ~ ~
2 ~ ~ ~   
我见过其他人问过类似的问题,但是他们的子列表只有一个元素,每个子列表前面也没有整数元素,因此他们使用以下方法来获得我需要的结果:

"\n".join(item[0] for item in list)
我不确定如何操作上述代码行来解决我的特定问题。我试着换衣服

item[0] to item[0:len(sub_list)] 
还有很多其他的事情,但都没有起作用。(我对Python非常缺乏经验)


任何帮助都将不胜感激。谢谢。

您可以理解列表长度范围内的索引

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

你可以对索引进行理解,直到列表的长度

'\n'.join('%s %s' % (list[2 * i], list[2 * i + 1]) for i in [0:len(list)/2])
首先,我用两人一组的方式将你的列表分组。然后,我在子列表上迭代,并使用以空格连接其元素,将其附加到第一个元素,最后使用特征线连接所有行(
\n

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

首先,我使用将列表分组为两组。然后,我在子列表上迭代,并使用以空格连接其元素,将其附加到第一个元素,最后使用特征线连接所有行(
\n


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

始终可以使用两次显式迭代:

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

我现在想不出比这更聪明的了。

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

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

我现在想不出比这更聪明的了。

首先,让我们更正一下这个定义:

lst = [0, ['~', '~', '~'], 1, ['~', '~', '~'], 2, ['~', '~', '~']]
请不要将
列表
用作标识符名称。它隐藏内置函数
列表

要使其更易于处理,请将其转换为简单的列表列表:

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

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

首先,让我们更正这个定义:

lst = [0, ['~', '~', '~'], 1, ['~', '~', '~'], 2, ['~', '~', '~']]
请不要将
列表
用作标识符名称。它隐藏内置函数
列表

要使其更易于处理,请将其转换为简单的列表列表:

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

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

如果您的列表确实具有这种精确的结构(非列表元素位于偶数位置,列表元素位于奇数位置),您可以这样做:

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

如果您的列表确实具有这种精确的结构(非列表元素位于偶数位置,列表元素位于奇数位置),您可以这样做:

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

您可以使用标准的以下命令以块(一次两个项目)的形式迭代列表:


您可以使用标准的以下命令以块(一次两个项目)的形式迭代列表:


没有其他答案那么聪明或简洁,但绝对可读:

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

没有其他答案那么聪明或简洁,但绝对可读:

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

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

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

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

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

join()
方法中不需要使用方括号
[]
。您可以将其作为生成器表达式传递。
join
无论如何都必须构建一个列表(以计算结果字符串的长度),因此使用列表理解而不是生成器表达式通常更快。@WolframH真的吗?为什么需要计算长度?你有一些与源代码的链接吗?它必须为字符串分配内存。我没有看源代码,但是它经常被声明。看这里,例如:。我会接受雷蒙德·海廷格的话。将
[]
放回。无需在
join()方法中使用方括号
[]
。您可以将其作为生成器表达式传递。
join
无论如何都必须构建一个列表(以计算结果字符串的长度),因此使用列表理解而不是生成器表达式通常更快。@WolframH真的吗?为什么需要计算长度?你有一些与源代码的链接吗?它必须为字符串分配内存。我没有看源代码,但是它经常被声明。看这里,例如:。我会接受雷蒙德·海廷格的话。将
[]
放回。将其设置为
索引,lst成对:
。将其设置为
索引,lst成对: