如何在python中打印列中的1和0及其索引?

如何在python中打印列中的1和0及其索引?,python,python-3.x,indexing,printing,multiple-columns,Python,Python 3.x,Indexing,Printing,Multiple Columns,我有一个0和1的列表,我想用标题和索引号将它们打印在两个不同的列中。像这样的。 列表=[1,0,1,1,1,0,1,0,1,0] ones zeros 1 1 2 0 3 1 6 0 4 1 8 0 5 1 10 0 7 1 11 0 9 1 这是所需的输出 我试过这个: list = [1,0,1,1,1,0,1,0,1,0,0] print('ones',end='\t') print('zeros') for in

我有一个0和1的列表,我想用标题和索引号将它们打印在两个不同的列中。像这样的。 列表=[1,0,1,1,1,0,1,0,1,0]

ones      zeros
1 1       2 0
3 1       6 0
4 1       8 0
5 1       10 0
7 1       11 0
9 1
这是所需的输出

我试过这个:

list = [1,0,1,1,1,0,1,0,1,0,0]

print('ones',end='\t')
print('zeros')

for index,ele in enumerate(list,start=1):
    if ele==1:
        print(index,ele,end="    ")
    elif ele==0:
        print("    ")
        print(index,ele,end="    ")
    else:
        print()
但这会产生如下输出:

ones    zeros
1 1        
2 0    3 1    4 1    5 1        
6 0    7 1        
8 0    9 1        
10 0        
11 0   
如何获得期望的输出?
非常感谢您的帮助。

您可以使用
itertools.zip_longest
str.ljust
、f字符串(用于格式化)和一些打印部分的计算,并使用两个列表保存0和1的索引:

l = [1, 0, 1, 1, 1, 0, 1, 0, 1, 0, 0]

ones, zeros = [], []
max_len_zeros = max_len_ones = 0

for index, num in enumerate(l, 1):
  if num == 0:
    zeros.append(index)
    max_len_zeros = max(max_len_zeros, len(str(index)))
  else:
    ones.append(index)
    max_len_ones = max(max_len_ones, len(str(index)))

from itertools import zip_longest

print('ones' + ' ' * (max_len_ones + 2) + 'zeros')

for ones_index, zeros_index in zip_longest(ones, zeros, fillvalue = ''):
  one = '1' if ones_index else ' '
  this_one_index = str(ones_index).ljust(max_len_ones)
  zero = '0' if zeros_index else ''
  this_zero_index = str(zeros_index).ljust(max_len_zeros)
  print(f'{this_one_index} {one}    {this_zero_index} {zero}')
In: l = [1, 0, 1, 0, 1, 0, 0, 1, 1, 0, 1, 1, 0, 0, 1, 0, 0, 1, 0, 1]
Out:
ones    zeros
1  1    2  0
3  1    4  0
5  1    6  0
8  1    7  0
9  1    10 0
11 1    13 0
12 1    14 0
15 1    16 0
18 1    17 0
20 1    19 0
输出:

ones   zeros
1 1    2  0
3 1    6  0
4 1    8  0
5 1    10 0
7 1    11 0
9 1        
0多于1的列表:

In: l = [1, 0, 0, 1, 0, 0, 1, 0, 1, 1, 0, 0, 0, 1, 0]
Out:
ones    zeros
1  1    2  0
4  1    3  0
7  1    5  0
9  1    6  0
10 1    8  0
14 1    11 0
        12 0
        13 0
        15 0
具有相等数量的0和1的列表:

l = [1, 0, 1, 1, 1, 0, 1, 0, 1, 0, 0]

ones, zeros = [], []
max_len_zeros = max_len_ones = 0

for index, num in enumerate(l, 1):
  if num == 0:
    zeros.append(index)
    max_len_zeros = max(max_len_zeros, len(str(index)))
  else:
    ones.append(index)
    max_len_ones = max(max_len_ones, len(str(index)))

from itertools import zip_longest

print('ones' + ' ' * (max_len_ones + 2) + 'zeros')

for ones_index, zeros_index in zip_longest(ones, zeros, fillvalue = ''):
  one = '1' if ones_index else ' '
  this_one_index = str(ones_index).ljust(max_len_ones)
  zero = '0' if zeros_index else ''
  this_zero_index = str(zeros_index).ljust(max_len_zeros)
  print(f'{this_one_index} {one}    {this_zero_index} {zero}')
In: l = [1, 0, 1, 0, 1, 0, 0, 1, 1, 0, 1, 1, 0, 0, 1, 0, 0, 1, 0, 1]
Out:
ones    zeros
1  1    2  0
3  1    4  0
5  1    6  0
8  1    7  0
9  1    10 0
11 1    13 0
12 1    14 0
15 1    16 0
18 1    17 0
20 1    19 0

用迭代的方式做你需要的事情是很困难的。我有一种“失败”的解决方案,它既显示了如何更好地完成您正在尝试做的事情,也显示了为什么迭代方法在这种情况下是有限的

我更新了您的代码如下:

list=[1,0,1,1,1,0,1,0,1,0,0]
打印('one',end='\t')
打印(“零”)
对于索引,枚举中的元素(列表,开始=1):
#首先检查是否需要额外的空间或新行或两者都需要
如果索引>1:
如果ele==1:
打印()
elif ele==0:
如果列表[索引-2]==1:
打印('',结束='\t')
其他:
打印(“”,end='\n\t\t')
#然后,写下你想要的输出,没有任何结尾
如果ele==1:
打印(索引,ele,end=“”)
elif ele==0:
打印(索引,ele,end=“”)
#最后是空行
打印()
它给出了以下输出:

1零
1 1     2 0
3 1
4 1
5 1     6 0
7 1     8 0
9 1     10 0
11 0
正如您所看到的,它的局限性在于您不能“向上”并用旧的行重写


但是,如果您需要完全按照所示进行显示,则需要构造一个中间数据结构(例如,
dict
),然后使用
zip

将其显示出来。请考虑在创建数据之前先创建数据,然后再打印(这将允许您更轻松地格式化,就像您对标题所做的那样)