如何使用列表推导在列表中生成更多值

时间:2014-01-11 20:52:11

标签: python list-comprehension

我目前正在尝试使用Python 3.3创建一张用于英国GCSE计算任务的卡,我想知道我是否可以在列表中使用列表推导来为我的卡创建面值。

我的结果列表需要如下所示:
['Ace','2', '3', '4', '5', '6', '7', '8', '9', '10','Jack','Queen','King']

-

我已经尝试了所有方法,尝试让代码在一条线上工作 我的一些尝试如下:

>>> ['Ace', [str(i) for i in range(2,11)] , 'Jack', 'Queen', 'King']
['Ace',['2', '3', '4', '5', '6', '7', '8', '9', '10'],'Jack','Queen','King']

-

>>> ['Ace', (str(i) for i in range(2,11)), 'Jack', 'Queen', 'King']
['Ace', <generator object <genexpr> at 0x02BD1260>, 'Jack', 'Queen', 'King']

-

我想使用列表理解的原因是获得编码知识的标记。我知道我可以像在问题开始时那样在列表中输入数字,但是对我来说,额外的一个标记对我来说是个大问题。

如果我将列表理解分配给变量,然后使用如下所示的for循环将数字插入faces列表,我可以获得列表理解,但我真的,真的,真的会更喜欢一行代码,因为它可以让我获得额外的代码效率标记。

>>>faces = ['ace', 'jack', 'queen', 'king']
>>>numbers = [i for i in range(2,11)]
>>>for x in numbers:
...    faces.insert(x-1,x)

2 个答案:

答案 0 :(得分:3)

使用列表连接:

>>> ['Ace'] + [str(i) for i in range(2,11)] + ['Jack', 'Queen', 'King']
['Ace', '2', '3', '4', '5', '6', '7', '8', '9', '10', 'Jack', 'Queen', 'King']

另一种选择是使用itertools.chain

>>> list(itertools.chain(['Ace'], [str(i) for i in range(2,11)],
                         ['Jack', 'Queen', 'King']))

['Ace', '2', '3', '4', '5', '6', '7', '8', '9', '10', 'Jack', 'Queen', 'King']

答案 1 :(得分:2)

这是一种不同的方式,使用dict.get

alternate_card_names = {1:'Ace',11:'Jack',12:'Queen',13:'King'}

[alternate_card_names.get(x,str(x)) for x in range(1,14)]
Out[19]: ['Ace', '2', '3', '4', '5', '6', '7', '8', '9', '10', 'Jack', 'Queen', 'King']