为什么这个for-loop没有运行次数表示?

时间:2017-03-07 20:31:19

标签: python python-3.x for-loop

我不知道我在这里做错了什么。我认为它只运行第一个命令,为什么它打印一次列表并且它没有运行其余的命令?

if __name__ == '__main__':
    N = int(input())
lis = []

def dance(string, lis):
    return {
        'insert': lis.insert(int(string[1]),int(string[2])),
        'print': print(lis),
        'remove': lis.remove(string[1]),
        'append': lis.append(string[1]),
        'sort': lis.sort(),
        'pop': lis.pop(),
        'reverse': lis.reverse(),
    }[string][0]

for i in range(N):
    string=input().split()
    dance(string, lis)

输入

12
insert 0 5
insert 1 10
insert 0 6
print
remove 6
append 9
append 1
sort
print

1 个答案:

答案 0 :(得分:1)

您的函数在选择其中一个之前调用所有方法:

def dance(string, lis):
    return {
        'insert': lis.insert(int(string[1]),int(string[2])),
        'print': print(lis),
        'remove': lis.remove(string[1]),
        'append': lis.append(string[1]),
        'sort': lis.sort(),
        'pop': lis.pop(),
        'reverse': lis.reverse(),
    }[string][0]

你应该将每个人包裹在一个lambda中,然后再调用所选的一个:

def dance(string, lis):
    return {
        'insert': lambda: lis.insert(int(string[1]),int(string[2])),
        'print': lambda: print(lis),
        'remove': lambda: lis.remove(string[1]),
        'append': lambda: lis.append(string[1]),
        'sort': lambda: lis.sort(),
        'pop': lambda: lis.pop(),
        'reverse': lambda: lis.reverse(),
    }[string[0]]()