【问题标题】:Adding more than one element at a time to a list generated with a loop in python [duplicate]一次将多个元素添加到使用python中的循环生成的列表中[重复]
【发布时间】:2016-10-06 11:31:14
【问题描述】:

我想列一个这样的列表:

[str(s),'Numpad{}'.format(s) for s in range(0,10)]

产生:

['1' , 'Numpad1' , '2' , ... ]

有语法上允许的方法吗?

【问题讨论】:

  • 是的,但是您到底想做什么?也许有更好的方法来实现您的目标?
  • Python3 返回无效格式...
  • 我想在条件语句中使用列表。
  • 请显示您的预期输出,然后可选择添加如何您想使用此
  • @AlexEshoo 为什么它必须是单行?为什么这很重要?

标签: python list loops


【解决方案1】:

我找到了一个很好的解决方案来解决您关于列表扁平化的问题here

import itertools
list(itertools.chain(*[[str(s),'Numpad{}'.format(s)] for s in range(1,10)]))

tdelaney 在 cmets 部分提供了更优雅的解决方案:

list(itertools.chain.from_iterable([str(s),'Numpad{}'.format‌​(s)] for s in range(0,10)))

【讨论】:

  • 你可以瘦一点:list(itertools.chain.from_iterable([str(s),'Numpad{}'.format(s)] for s in range(0,10)))
  • nit:范围(1、11)。即使 OP 有 range(0, 10),它们的输出也是从 1 开始的。
  • 谢谢@tdelaney!谢谢@idjaw!固定!
  • @tommy.carstensen 我犯了一个错误。 range(1, 11) 实际上使它在 10 结束。:)
  • 提问者从未提及,到底应该以 9 还是 10 结尾 :)
【解决方案2】:

使用元组?

In [1]: [(str(s),'Numpad{}'.format(s)) for s in range(0,10)]
Out[1]:
[('0', 'Numpad0'),
 ('1', 'Numpad1'),
 ('2', 'Numpad2'),
 ('3', 'Numpad3'),
 ('4', 'Numpad4'),
 ('5', 'Numpad5'),
 ('6', 'Numpad6'),
 ('7', 'Numpad7'),
 ('8', 'Numpad8'),
 ('9', 'Numpad9')]

迭代
for (val, numpad) in lst:

【讨论】:

  • 不是我想要的,因为我不想搜索元组
  • 好吧,你没说搜索
  • @AlexEshoo 我认为你应该在你的问题中提供更多关于你想要达到的目标的信息,这样读者就可以知道如何用所有必要的信息为你提供一个好的解决方案.
猜你喜欢
  • 2014-12-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-09-29
相关资源
最近更新 更多