我是Python的新手,我自己也在学习它。
我有两个列表,我正在尝试使用extend函数将list2
的内容附加到list1
:
list1 = ['c', 'cpp', 'python', 123, 456]
list2 = [10, 20, 30, 10, 40, 50, 10]
list3 = list1.extend(list2)
print list3
这会将输出显示为: None
但是,当我删除list3
并使用:
list1.extend(list2)
print list1
它给出了输出:
['c', 'cpp', 'python', 123, 456, 2014, 10, 20, 30, 10, 40, 50, 10]
这是为什么? list3
有什么不同之处在于它不会提供与我print list1
时相同的序列?
答案 0 :(得分:3)
这是因为extend
方法就地修改了列表并且没有返回任何内容(也就是说,它返回None
)。
有关详情,请参阅https://docs.python.org/2/tutorial/datastructures.html
答案 1 :(得分:1)
我认为你需要的是
list3 = list1 + list2
extend
修改原始list1,它不会返回任何内容
答案 2 :(得分:0)
你得到的是None
,因为那是extend
的目的。 Python的一个好处是它是一种自我记录语言,可以为您提供有关如何使用其内置函数的信息。
在Python解释器中试试这个。列一个清单:
mammals = ['aardvark', 'bear', 'cat']
现在写下以下内容,没有括号或任何内容。正是这样:
mammals.extend
Python解释器打印出mammals.extend
。不是调用extend
的结果,而是调用extend
本身的值。
<built-in method extend of list object at 0x102939fc8>
这是extend
的字符串表示形式。我们可以看到它是附加到列表的方法。
现在这样做:
print(mammals.extend.__doc__)
您将获得一个很好的文档字符串。所有内置方法都有一个__doc__
属性,当您不确定某些内容是如何工作时,可以打印出来。
在这种情况下,您会看到问题的答案。
L.extend(iterable) -> None -- extend list by appending elements from the iterable
这告诉我们,调用extend
的结果是None
。
您在编写函数时可以创建自己的doc字符串。将您的简短文档放在函数第一行的字符串中,只要您或其他人使用您的代码在函数上调用__doc__
,就会神奇地返回该字符串。像这样:
def double(s):
"""double(s): Returns the concatenation of the string with itself."""
return s+s
double("banana") # Test our new function.
print(double.__doc__) # Get the doc string.
顺便说一句,您可以在空字符串上调用extend
:
print([].extend.__doc__)
这将为您提供相同的文档字符串,因为extend
是每个列表的方法。
如果要将两个列表粘合在一起,请执行以下操作。
mammals = ['aardvark', 'bear', 'cat']
more_mammals = ['dog', 'elephant', 'giraffe']
all_mammals = mammals + more_mammals
print(all_mammals)
您可以使用+=
运算符代替extend
。这一行:
mammals += more_mammals
与此行具有相同的效果:
mammals.extend(more_mammals)
小心修改列表的+=
等操作。这可能并不总是你想要的。
要保持列表不变,请使用+
创建一个新列表,即连接运算符,如前所述。
all_mammals = mammals + more_mammals
如果您不关心mammals
的旧价值,并且您真的想用more_mammals
进行扩展,请继续使用+=
。