Python困境这个功能应该有效,但它没有

时间:2018-01-23 16:14:56

标签: python

我认为这应该有用,但有人可以解释我为什么?在给定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?

2 个答案:

答案 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]