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

2024-04-19 19:44:19 发布

您现在位置:Python中文网/ 问答频道 /正文

目前,我正在编写我的Python2书中的一组练习,其中一个问题让我很为难。以下是问题:

“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书疯了吗?我在这里完全不知道元组有什么吗?帮助。。。你知道吗


Tags: 用户程序false列表inputmaindefnot
3条回答

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

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

这可能是因为该练习认为您不必通过一次附加一个元素来构建元组,事实上,您可以通过一点隐式循环来完成这一切:

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(...)。你知道吗

只需对元组使用+运算符即可。你知道吗

>>> 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()

相关问题 更多 >