我认为这应该有用,但有人可以解释我为什么?在给定0和1的列表作为输入的情况下,函数是展开的并且应该表现如下:
if input = [1,0,1] -> output = [[0, 1], [1, 0], [0, 1]]
if input = [1,1,1] -> output = [[0, 1], [0, 1], [0, 1]]
if input = [0,1,1] -> output = [[1, 0], [0, 1], [0, 1]]
if input = [0,0,0] -> output = [[1, 0], [1, 0], [1, 0]]
ecc.
WHY THE FOLLOWING IS NOT WORKING?
def expand(a):
o = []
t = [0]*2 # t = [0,0]
for element in a:
if element == 0:
t[0] = 1
t[1] = 0
elif element == 1:
t[0] = 0
t[1] = 1
o.append(t)
return o
#Es using expand: input [1,0,1] -> output [[1, 0], [1, 0], [1, 0]]
#instead of [[0, 1], [1, 0], [0, 1]] what's wrong?
答案 0 :(得分:0)
你应该在for循环中创建t。现在t将始终反映最后一次更改。
将t视为某段记忆的名称。由于你不会改变记忆位置,你会一遍又一遍地调整同一块
for element in a:
t = [0]*2
if element == 0:
#rest of your code
此处内存位置已更改,因为您每次都重新创建
答案 1 :(得分:0)
不要使用临时列表并按照以下方式执行此操作:
def expand(a):
o = []
for element in a:
if element == 0:
o.append([1, 0])
elif element == 1:
o.append([0, 1])
return o
另一种解决方案是列表理解:
def expand(a):
# if your input values can only be `1` or `0`
# 'if 0' always evaluates to False whereas 'if any_int_except_zero' always evaluates to True
return [[0, 1] if element else [1, 0] for element in a]