使用第二个列表扩展list1

时间:2014-11-24 03:22:35

标签: python python-2.7

我是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时相同的序列?

3 个答案:

答案 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进行扩展,请继续使用+=