当前位置: 首页 > 面试题库 >

Python列表+ =可迭代的行为是否记录在任何地方?

吴城
2023-03-14
问题内容

看来在Python中,它list += x适用于任何可迭代的对象x

In [6]: l = []

In [7]: l += [1]

In [8]: l += (2, 3)

In [9]: l += xrange(5)

In [10]: l
Out[10]: [1, 2, 3, 0, 1, 2, 3, 4]

此行为记录在任何地方吗?

与此形成对比的是list + x,后者仅当x也是有效时才起作用list。这在文档中有详细说明。


问题答案:

从Guido van
Rossum
出发:

.extend()除了也返回外,其工作方式与之相同self。我找不到说明此问题的文档。:-(

以下是相关的源代码,摘自listobject.c

list_inplace_concat(PyListObject *self, PyObject *other)
{
     PyObject *result;

     result = listextend(self, other);
     if (result == NULL)
         return result;
     Py_DECREF(result);
     Py_INCREF(self);
     return (PyObject *)self;
}

我提出了一个错误报告来修复此文档:http :
//bugs.python.org/issue16701



 类似资料:
  • 问题内容: 我需要检查映射是否包含列表中的任何键,如果包含,则返回第一个匹配值。想到的幼稚方法是在两个嵌套循环中进行: 有没有一种更好,更有效的方法,可能是一种依靠Java标准库的方法? 问题答案: 当然是这样的: 上面每个候选键仅执行 一次 映射查找。它避免了对存在性与提取进行单独的测试,因为提取不存在的密钥只会给您一个null。注意(感谢 Slanec ),对于此解决方案,有效密钥的null值

  • 问题内容: 考虑: 因此,按预期方式,通过更改同一对象来处理迭代器。 在这种情况下,我希望: 跳过每第二个元素:对的调用应使迭代器前进一次,然后循环进行的隐式调用应使它第二次进行-并将第二次调用的结果分配给。 没有。该循环将打印列表中的 所有 项目,而不会跳过任何项目。 我的第一个想法是可能发生这种情况,因为循环调用了它所传递的内容,并且这可能会提供一个独立的迭代器-事实并非如此。 那么,为什么在

  • 问题内容: 有像isiterable这样的方法吗?到目前为止我找到的唯一解决办法就是打电话 但是我不确定这有多愚蠢。 问题答案: 检查是否可以处理序列类型,但是对于Python 2中的字符串可能会失败。我也想知道正确的答案,在此之前,这是一种可能性(也适用于字符串): 所述内置的检查的方法或串的情况下的方法。 另一种通用的pythonic方法是假定一个可迭代的对象,如果它不适用于给定的对象,则将优

  • 问题内容: 我正在研究[Alex Marteli的《Nutshell》中的Python,这本书建议具有方法的任何对象都是(或至少可以用作) 迭代器 。它还建议大多数迭代器是通过对称为的方法的隐式或显式调用构建的。 阅读本书中的内容后,我感到有尝试的渴望。我启动了python 2.7.3解释器并执行以下操作: 但是结果是这样的: 在混乱中,我尝试通过研究x对象的结构,并发现它具有一个功能对象。因此,

  • 问题内容: Python似乎在创建列表对象和何时创建列表对象之间有所区别。为什么会有这种差异? 虽然第一个表达式似乎按预期工作,但第二个表达式的工作方式更像是迭代dict: 问题答案: 是包含 元素 的列表。 接受(必须已经可以 迭代 !)并将其转换为列表。 列表构造函数-像python的所有内置集合类型(集合,列表,元组,collections.deque等)一样- 可以采用一个可迭代的参数并将

  • 问题内容: 上面的python代码使输出与预期的完全不同。我想循环播放项目,以便在循环播放时可以跳过某个项目。 问题答案: 该代码试图在迭代列表时修改列表。我在任何情况下都不会这样做。 你可以使用运算符跳过列表中的每三个项目。 关于我的示例的其他要点与中的新语法有关。 我使用列表推导定义t,因为它在中有效(请参见下文) t是中的函数 现在,的行为类似于,但它适用于任意大小的值。后者不再存在。