【问题标题】:Python lists without assigning variables没有分配变量的 Python 列表
【发布时间】:2013-08-27 04:37:01
【问题描述】:

好吧,我可以在 Python 上轻松使用这段代码而不会出错:

>>>> a = range(5, 10)
>>>> b = range(15, 20)
>>>> a.extend(b)
>>>> a
[5, 6, 7, 8, 9, 15, 16, 17, 18, 19]

我也可以用这个方法,不用b

>>>> a = range(5, 10)
>>>> a.extend(range(15, 20))
>>>> a
[5, 6, 7, 8, 9, 15, 16, 17, 18, 19]

但我不明白为什么在这种情况下不会发生同样的事情:

>>>> [5, 6, 7, 8, 9].extend(range(15, 20))
>>>>

a 不应该和上面的列表一样吗?我只看到硬编码初始状态的区别。我真的可以理解,当硬编码列表不在变量或其他东西中时,它不能被修改,但是......

>>>> [5, 6, 7, 8, 9][2]
7

这让我很吃惊。更奇怪的是:

>>>> [5, 6, 7, 8, 7].count(7)
2
>>>> [5, 6, 7, 8, 7].index(8)
3

为什么一些列表方法可以处理硬编码/非变量列表,而其他方法可以?

我不太喜欢使用它,这更多是为了个人知识和对语言的理解,而不是有用。

【问题讨论】:

    标签: python list methods hardcode


    【解决方案1】:
    1. extend 不返回值。因此,打印a.extend(b) 将是None。因此,如果您有a = [5, 6, 7, 8, 9].extend(range(15, 20)) 并打印a,它将显示None。一种解决方法是连接列表a = [5, 6, 7, 8, 9] + range(15, 20)

    2. [5, 6, 7, 8, 9][2] - 一切都是应该的,因为它从 0 开始计数元素。它不是在修改列表,它只是从列表中返回某个元素。

    3. [5, 6, 7, 8, 7].count(7)[5, 6, 7, 8, 7].index(8) 显示预期的输出。第一个是 7 在列表中出现的次数,第二个是数字 8 的索引(同样,从 0 开始计数)。

    因此,总而言之,硬编码列表的使用在您生成的所有示例中都符合预期。

    【讨论】:

    • 嗯,我明白了。除了扩展结果列表之外,a.extend(b) 是否有任何理由不返回结果列表?例如,我发现使用 a = [5, 6, 7, 8, 9].extend(range(15, 20)) 很有用。
    • @ranisalt [5, 6, 7, 8, 9] + range(15, 20) 会做你想做的事
    • 它没有返回任何内容,因为它是对列表的操作。当您执行“a.extend”时,您将元素附加到“a”。从概念上讲,让这个操作做两件事是不好的——返回扩展列表和扩展传递的列表。
    • @sashkello a = [5, 6, 7, 8, 9].extend(range(15, 20)) 导致 a 成为 None
    • @flornquake 是的,没错,这就是我在回答的第一段中所说的。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-01-10
    • 2018-08-23
    • 1970-01-01
    • 1970-01-01
    • 2013-10-22
    • 2017-11-02
    • 2016-02-10
    相关资源
    最近更新 更多