字符串的模拟成立:
string1 = 'abc'
''.join(string1) == string1 # True
那为什么不成立:
list1 = ['a', 'b', 'c']
[].extend(list1) == list1 # AttributeError: 'NoneType' object has no attribute 'extend'
type([])
返回列表。为什么它会被视为NoneType而不是具有extend方法的列表?
这是一个学术问题。我不会这样做是常规代码,我只想了解。
答案 0 :(得分: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
答案 1 :(得分:5)
您正在尝试将扩展程序的返回值与列表进行比较。 extend
是一个就地操作,意味着它不会返回任何内容。
join
实际上返回了操作的结果,因此可以比较两个字符串。
答案 2 :(得分:0)
>>> first = [1,2,3]
>>> second = []
>>> second.extend(first)
>>> first == second
True