汇总时不断更新列表

时间:2019-01-19 02:57:27

标签: python

我是Python的入门者。我需要帮助。 我收到一个起点(在这种情况下为(2,0)),并且必须将两个数字相加。例如(2,0)+(1,1)=(3,1)。 我必须继续这样做,直到获得列表的最大值(在这种情况下为5)元素为止。

但是我有一个问题。我无法循环播放并不断更新列表。 该函数必须使用任何值。有人能帮我吗? 这是我所拥有的(知道这是错误的,但是我被卡住了):

def summ(a, b):
    return (a[0] + b[0], a[1] + b[1])

x= (((5), (2,0), (1,1)))

maxx= x[0] #max of elements in list
start= x[1] #starting point
direction= x[2] #what it must sum

def position(x):

    new_list= ()

    for i in x:
        new_list = start, summ(start, direction)
        new_list += (summ(new_list[-1], direction), )
        if len(new_list) == maxx:
            break

    return new_list

#the output I had
((2, 0), (3, 1), (4, 2))

#the output I need
((2, 0), (3, 1), (4, 2), (5, 3), (6, 4)) #5 elements, maxx

3 个答案:

答案 0 :(得分:-1)

让我们接受@StephenRauch的明智建议并移动:

new_list = start, summ(start, direction)
for循环之外的

。并像我们一样清理代码:

def summ(a, b):
    return a[0] + b[0], a[1] + b[1]

def position(argument):

    maxx, start, direction = argument

    new_list = [start]

    for _ in range(maxx - len(new_list)):
        new_list.append(summ(new_list[-1], direction))

    return tuple(new_list)

print(position(((5), (2, 0), (1, 1))))

输出

> python3 test.py
((2, 0), (3, 1), (4, 2), (5, 3), (6, 4))
>

现在让我们从代码中获得更多乐趣,而不是重新发明矢量算法,我们将从Python turtle导入Vec2D。并返回一个list对我来说比tuple更有意义:

from turtle import Vec2D

def position(argument):

    maxx, start, direction = argument

    return [start + n * direction for n in range(maxx)]

print(position(((5), Vec2D(2, 0), Vec2D(1, 1))))

输出

> python3 test2.py
[(2.00,0.00), (3.00,1.00), (4.00,2.00), (5.00,3.00), (6.00,4.00)]
> 

答案 1 :(得分:-1)

使用列表理解:

a = ((5,), (2,0), (1,1))

b = [(a[1][0] + i*a[2][0], a[1][1] + i*a[2][1]) for i in range(a[0][0])]

答案 2 :(得分:-2)

def summ(a, b):
    return a[0] + b[0], a[1] + b[1]


x = 5, (2, 0), (1, 1)


def position(x):
    i = 1
    new_list = [x[i]]

    while i < x[0]:
        new_list += summ(new_list[i - 1], x[2]),
        i = i + 1

    return new_list


print(position(x))

经过测试,输出是

[(2,0),(3,1),(4,2),(5,3),(6,4)]