【发布时间】:2017-07-05 19:13:29
【问题描述】:
我正在尝试修改包含两个列表的列表。对于两个内部列表中的每一个,我都会执行一些操作并将它们“拆分”为新列表。
这是我正在尝试做的一个简单示例:
[['a', 'b'], ['c', 'd']] --> [['a'], ['b'], ['c', 'd']]
目前,我的算法将 ['a', 'b'] 传递给一个函数,该函数确定是否应将其拆分为 [['a'], ['b']](例如,基于它们的相关性)。该函数返回[['a'], ['b']],它告诉我['a', 'b'] 应该被拆分,或者返回['a', 'b'](原始列表),这表明它不应该被拆分。
目前我有这样的事情:
blist = [['a', 'b'], ['c', 'd']] #big list
slist = [['a'], ['b']] #small list returned by function
nlist = [items for i in xrange(len(blist)) for items in (slist if i==0 else blist[i])]
这会产生[['a'], ['b'], 'c', 'd'],而不是所需的输出[['a'], ['b'], ['c', 'd']],后者不会改变原始列表中的第二个列表。我理解为什么会发生这种情况——在这种情况下,我的第二个循环也适用于 blist[1],但我不确定如何解决它,因为我不完全理解列表理解。
首选“pythonic”解决方案。 任何反馈将不胜感激,谢谢!
编辑:正如标题所示,我正在尝试用['a'], ['b'] '替换'['a', 'b']。所以我希望'位置'是相同的,['a'], ['b'] 出现在['c', 'd'] 之前的原始列表中
结果 感谢 Christian、Paul 和 schwobaseggl 的解决方案!他们都工作:)
【问题讨论】:
-
你在自相矛盾。您是将项目传递给函数还是使用嵌套列表理解?无论如何,如果您不了解列表推导,为什么不使用简单的 for 循环,直到您了解?我愿意。
-
对不起,我的意思是该函数用于帮助确定列表是否被拆分,嵌套列表理解执行更改/拆分
-
@hop 我相信我了解简单的 for 循环。我想更熟悉列表推导并有更好的理解。只是想练习一下。另外,通过“我会”,您是否建议仅使用简单的 for 循环有助于理解列表理解?我知道它们有相似之处,但是就像在我的示例中一样,列表理解似乎与不同顺序的语句更加紧凑。您能否详细说明两者之间的关系?
标签: python python-2.7 list list-comprehension