Python 具有循环奇数的整数列表

Python 具有循环奇数的整数列表,python,Python,给定一个从0到N顺序整数的列表,其中N是一个偶数,例如a=[0,1,2,3,4]我正在寻找一个列表理解,即类型为[a代表a],用于创建另一个列表B=[0,1,1,2,3,4]重复输入列表中的奇数,A这里有一个(有点难看的)列表理解解决方案: a = range(5) list(itertools.chain(*[[x, x] if x % 2 == 1 else [x] for x in a])) # => [0, 1, 1, 2, 3, 3, 4] 列表理解构建子列表的列表: [[x,

给定一个从
0
N
顺序整数的列表,其中
N
是一个偶数,例如
a=[0,1,2,3,4]
我正在寻找一个列表理解,即类型为
[a代表a]
,用于创建另一个列表
B=[0,1,1,2,3,4]
重复输入列表中的奇数,
A

这里有一个(有点难看的)列表理解解决方案:

a = range(5)
list(itertools.chain(*[[x, x] if x % 2 == 1 else [x] for x in a]))
# => [0, 1, 1, 2, 3, 3, 4]
列表理解构建子列表的列表:

[[x, x] if x % 2 == 1 else [x] for x in a] # => [[0], [1, 1], [2], [3, 3], [4]]
itertools.chain
调用只是在Python中使用的众多方法之一。

下面是一个(有点难看的)列表理解解决方案:

a = range(5)
list(itertools.chain(*[[x, x] if x % 2 == 1 else [x] for x in a]))
# => [0, 1, 1, 2, 3, 3, 4]
itertools.chain(*[[i] * (i % 2 + 1) for i in xrange(N + 1)])
列表理解构建子列表的列表:

[[x, x] if x % 2 == 1 else [x] for x in a] # => [[0], [1, 1], [2], [3, 3], [4]]

itertools.chain
调用只是Python中的许多方法之一。

这种表达式称为列表理解,但我认为它不能满足您的要求。看起来您希望我们为您编写一些代码。虽然许多用户愿意为陷入困境的程序员编写代码,但他们通常只在海报已经试图自己解决问题时才提供帮助。演示这项工作的一个好方法是,包括您迄今为止编写的代码、示例输入(如果有)、预期输出和实际获得的输出(控制台输出、堆栈跟踪、编译器错误——任何适用的)。你提供的细节越多,你可能收到的答案就越多。试试生成器吧!(提示:
yield
两次。)@David我是Python的初学者,直到Thomas K的回答(谢谢Tom)我才知道表达式类型的名称。我可以使用显式for循环,但我想知道是否可以使用列表理解生成输出列表。@Olumide,Martijn指出了这里大多数人每天都在处理的事情:人们懒惰。我喜欢大卫关于“你尝试了什么?”的帖子,因为它向潜在的回应者展示了你迄今为止所付出的努力(以及什么不起作用)。有些答案非常冗长,如果你尝试了一些技巧,但对你无效,你可能最终会浪费一些人宝贵的时间!注意:由于您是Python新手,如果您还没有阅读过PEP 8和PEP 20,我也建议您阅读。我希望我刚开始的时候有人告诉我这些=/这种表达式叫做列表理解,但我认为它不能满足你的要求。看起来你想让我们为你写一些代码。虽然许多用户愿意为陷入困境的程序员编写代码,但他们通常只在海报已经试图自己解决问题时才提供帮助。演示这项工作的一个好方法是,包括您迄今为止编写的代码、示例输入(如果有)、预期输出和实际获得的输出(控制台输出、堆栈跟踪、编译器错误——任何适用的)。你提供的细节越多,你可能收到的答案就越多。试试生成器吧!(提示:
yield
两次。)@David我是Python的初学者,直到Thomas K的回答(谢谢Tom)我才知道表达式类型的名称。我可以使用显式for循环,但我想知道是否可以使用列表理解生成输出列表。@Olumide,Martijn指出了这里大多数人每天都在处理的事情:人们懒惰。我喜欢大卫关于“你尝试了什么?”的帖子,因为它向潜在的回应者展示了你迄今为止所付出的努力(以及什么不起作用)。有些答案非常冗长,如果你尝试了一些技巧,但对你无效,你可能最终会浪费一些人宝贵的时间!注意:由于您是Python新手,如果您还没有阅读过PEP 8和PEP 20,我也建议您阅读。我希望在我刚开始的时候有人告诉我这些=/我想到了类似的东西,但我不知道如何“折叠”列表。相反,为了输出两个值,我将其输出为一个数组(正如您所做的)。是一种将列表链接在一起的更有效的方法-如果N.Hans值较大,则连接列表的效率会非常低。你给了我目标!:)@大卫:哇,我这边快了1000%。谢谢你启发我:)@HansEngel,我很高兴你被启发了!=)不过,还有一个小问题-
itertools.chain
返回一个生成器,而不是一个列表(您可能需要澄清这一点/使用
list()
进行转换)。我提出了类似的方法,但我不知道如何“折叠”列表。相反,为了输出两个值,我将其输出为一个数组(正如您所做的)。是一种将列表链接在一起的更有效的方法-如果N.Hans值较大,则连接列表的效率会非常低。你给了我目标!:)@大卫:哇,我这边快了1000%。谢谢你启发我:)@HansEngel,我很高兴你被启发了!=)不过,还有一个小问题-
itertools.chain
返回一个生成器,而不是一个列表(您可能需要澄清这一点/使用
list()
进行转换)。
itertools.chain(*[[i] * (i % 2 + 1) for i in xrange(N + 1)])