0

可能重复:
Python 列表扩展和变量赋值

字符串的类比是正确的:

string1 = 'abc'
''.join(string1) == string1 # True

那么为什么这不成立:

list1 = ['a', 'b', 'c']
[].extend(list1) == list1 # AttributeError: 'NoneType' object has no attribute 'extend'

type([])返回列表。为什么它会被视为 NoneType 而不是具有扩展方法的列表?

这是一个学术问题。我不会这样做是常规代码,我只是想了解。

4

3 回答 3

11

因为list.extend()修改了列表并且不返回列表本身。你需要做的是得到你所期望的:

lst = ['a', 'b', 'c']
cplst = []
cplst.extend(lst)
cplst == lst

您引用的功能并不是真正相似的。 返回通过将迭代器的成员与正在编辑join()的字符串连接在一起而创建的新字符串。join类似的list操作看起来更像:

def JoiningList(list):

    def join(self, iterable):
        new_list = iterable[0]
        for item in iterable[1:]:
            new_list.extend(self)
            new_list.append(item)
        return new_list
于 2013-01-23T21:21:20.883 回答
5

您正在尝试将扩展名的返回值与列表进行比较。extend是就地操作,这意味着它不返回任何内容。

join另一方面,实际上返回的是运算的结果,因此可以比较两个字符串。

于 2013-01-23T21:21:46.780 回答
0
>>> first = [1,2,3]
>>> second = []
>>> second.extend(first)
>>> first == second
True
于 2013-01-23T21:23:53.243 回答