如何使用列表理解在lis中生成更多值

2024-06-01 07:50:47 发布

您现在位置:Python中文网/ 问答频道 /正文

我目前正在尝试为一个英国GCSE计算作业创建一张Python3.3版本的卡片,我想知道我是否可以在列表中使用列表理解来创建卡片的面值。你知道吗

我的结果列表需要如下所示:
['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)

Tags: 代码in列表forrange数字分数ace
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']

使用列表串联:

>>> ['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']

另一种选择是使用^{}

>>> 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']

相关问题 更多 >