用元组替换程序中的列表?

时间:2013-10-14 20:01:50

标签: python list input tuples

目前我正在从我的Python 2书中进行一系列练习,并且遇到其中一个问题。以下是问题:

“5.1 - 编写一个从用户读取数字列表的程序;当用户输入0时,列表终止。在所有输入之后,程序应该打印列表。”

我对5.1的回答如下:

def main():
    L = []
    done = False
    while not done:
        num = input( "Enter a number: " )
        if num == 0:
            for i in L:
            print i
            done = True
        else:
            L.append(num)

main()

问题在于练习5.2,其中要求:

“5.2 - 更改程序(5.1)以使用元组而不是列表。”

这甚至可能吗?我的印象是元组是不可变的,因此它们实际上不能用来代替列表。我对吗?我疯了吗?我的Python书是疯了吗?有关于元组的东西我在这里完全不见了吗?帮助...

3 个答案:

答案 0 :(得分:5)

你不能修改元组,但你可以通过合并两个元组来创建一个新的元组:

>>> tup = ()
>>> tup += (1,)
>>> tup
(1,)
>>> tup += (2,)
>>> tup
(1, 2)

答案 1 :(得分:1)

可能是练习认为你不能通过一次附加一个元素来构建元组,事实上,你可以通过一些隐式循环来完成所有这些:

def get_some_input():
    return input("Enter a number: ")

def main():
    T = tuple(iter(get_some_input, 0))

    for i in T:
        print i

注意我们没有写

T = tuple(iter(get_some_input(), 0))
#                            ^^

我们希望将get_some_input函数传递给iter,而不是调用它的结果。 iter会反复为我们调用该函数,直到获得0为止。

我们也可以写:

def main():
    T = iter(get_some_input, 0)

    for i in T:
        print i

没有tuple()。不同之处在于我们在开始for循环之前不会消耗所有iter(...)

答案 2 :(得分:0)

您只需使用+运算符作为元组。

>>> t = ()
>>> t += (9,)
>>> t
(9,)
>>> t += (3,)
>>> t
(9, 3)

您可以通过不同方式初始化元组:

a = () # 0-tuple (empty tuple)
b = (item,) # 1-tuple (note the trailing comma)
c = item, # 1-tuple (note the trailing comma)

这就是我写函数的方法:

def main():
    l = ()
    num = None
    while num != 0:
        num = input("Enter a number: ")
        if num == 0:
            for i in l:
                print i
        else:
            l += (num,)

main()