表格中交替的1和0 - Python

0 投票
4 回答
2977 浏览
提问于 2025-04-18 01:29

我想用循环和列表来制作一个交替出现1和0的表格,表格的行数和列数是可以指定的(就像下面的代码一样)。有没有什么好的方法可以实现这个呢?

#fill elements in left and right columns with ones

ROWS = m
COLUMNS = n
table = []

for i in range(COLUMNS):
    if i ==0 or i == (COLUMNS-1):
        column = [1] * ROWS
    else:
        column = [0] * ROWS
    table.append(column)

for i in range(ROWS):
    for j in range(COLUMNS):
        print(table[j][i], end=" ")
    print()

4 个回答

0

我会使用 itertools.cycle 来让代码更易读(可能也更快?):

import itertools

rows = cols = 4
even_gen = itertools.cycle((0, 1))
odd_gen = itertools.cycle((1, 0))

even = [next(even_gen) for _ in xrange(cols)]
odd = [next(odd_gen) for _ in xrange(cols)]
both = itertools.cycle((even, odd))
result = [next(both)[:] for _ in xrange(rows)]

编辑 添加了 next(both)[:] 来实际返回行的副本

1

我会选择:

from itertools import cycle, islice

COLUMNS = 5; ROWS = 4
values = cycle([0, 1])
table = [list(islice(values, COLUMNS)) for _ in xrange(ROWS)]
# [[0, 1, 0, 1, 0], [1, 0, 1, 0, 1], [0, 1, 0, 1, 0], [1, 0, 1, 0, 1]]

这样可以自动循环这些值,而且不需要复制已有的列表。

处理偶数长度的列:

COLUMNS = 4; ROWS = 4
values = [cycle([0, 1])]
if COLUMNS % 2 == 0:
    values.append(cycle([1, 0]))
values = cycle(values)

table = [list(islice(next(values), COLUMNS)) for _ in xrange(ROWS)]
1

你可以先单独创建第一行和第二行,然后交替返回它们的副本,像这样:

def get_table(rows, cols):
    row2,row1 = [i%2 for i in xrange(cols)],[i%2 for i in xrange(1,cols+1)]
    return [row1[:] if i % 2 else row2[:] for i in xrange(rows)]

print get_table(5, 6)

输出结果

[[0, 1, 0, 1, 0, 1],
 [1, 0, 1, 0, 1, 0],
 [0, 1, 0, 1, 0, 1],
 [1, 0, 1, 0, 1, 0],
 [0, 1, 0, 1, 0, 1]]
4

也许你想要这样的东西:

ROWS = 5
COLUMNS = 5
table = [[1 if i%2==0 else 0 for i in range(COLUMNS)] for j in range(ROWS)]

for row in table:
for cell in row:
    print (cell, end=' ')
print()
1 0 1 0 1
1 0 1 0 1
1 0 1 0 1
1 0 1 0 1
1 0 1 0 1

或者也可能是:

table = [[(i+j)%2 for i in range(COLUMNS)] for j in range(ROWS)]
0 1 0 1 0
1 0 1 0 1
0 1 0 1 0
1 0 1 0 1
0 1 0 1 0

撰写回答