编写创建并返回列表的函数

时间:2014-01-31 16:53:52

标签: python list

我目前正在尝试编写一个函数,该函数创建并返回指定长度的列表,其中包含指定值的重复。我真的不确定如何从输入的参数中获取函数来创建列表。非常感谢帮助!我要求为我编写代码,只是简单解释我应该使用什么Python函数或者指向正确方向的东西。到目前为止我唯一的代码就是这个,我知道这是错误的:

def makeList(a,b):
    myList = []
    myList = makeList
    return myList

2 个答案:

答案 0 :(得分:3)

修改

既然你说你想要使用循环:

>>> def makeList(a, b):
...     myList = []
...     for _ in range(b):
...         myList.append(a)
...     return myList
...
>>> makeList('a', 12)
['a', 'a', 'a', 'a', 'a', 'a', 'a', 'a', 'a', 'a', 'a', 'a']
>>> makeList(3, 12)
[3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3]
>>>


实际上,因为解决方案很短,解释它的最简单方法是演示:

>>> def makeList(a, b):
...     return [a] * b
...
>>> makeList('a', 12)
['a', 'a', 'a', 'a', 'a', 'a', 'a', 'a', 'a', 'a', 'a', 'a']
>>> makeList(3, 12)
[3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3]
>>>

基本上,您将a放在列表中,然后将该列表乘以b。这样做会创建一个列表,其内容a重复b次。

但应注意,如果a是可变对象(例如列表),则上述函数将返回包含b对同一对象a的引用的列表}。

如果不希望出现这种行为,那么您可以使用列表推导和copy.deepcopy

>>> from copy import deepcopy
>>> def makeList(a, b):
...     return [deepcopy(a) for _ in range(b)]
...
>>> makeList('a', 12)
['a', 'a', 'a', 'a', 'a', 'a', 'a', 'a', 'a', 'a', 'a', 'a']
>>> makeList(3, 12)
[3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3]
>>>

最后,这里有一些有用的参考资料:

  1. copy.deepcopy

  2. Sequence types

  3. range

  4. List comprehensions


  5. 注意:在所有演示中,假设b是一个整数。

答案 1 :(得分:0)

您可以将列表相乘以生成更大的列表。在Python解释器中尝试此代码:

>>> [1] * 5
[1, 1, 1, 1, 1]

>>> [1, 2] * 5
[1, 2, 1, 2, 1, 2, 1, 2, 1, 2]

所以你应该能够在一个函数中做这样的事情:

def makeList(a,b):
    return [a] * b

您还可以使用列表附加()函数:

>>> x = [1, 2]
>>> x.append(99)
>>> print x
[1, 2, 99]

交互式Python解释器有一个很棒的内置帮助系统。您可以使用dir()和help()来查找可用的函数及其工作方式。试试这个:

>>> x = [1, 2]
>>> dir(x)         # lists the functions you can call on x
>>> help(x.append) # Describes each function
>>> help(x.extend)