表格中交替的1和0 - Python
我想用循环和列表来制作一个交替出现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