选择性展平Python列表

cja*_*vin 2 python list-comprehension list flatten

假设我有一个包含(以及其他)不同类型的子列表的列表:

[1, 2, [3, 4], {5, 6}]
Run Code Online (Sandbox Code Playgroud)

我想以一种选择性的方式扁平化,这取决于它的元素类型(即我只想展平sets,其余部分不平整):

[1, 2, [3, 4], 5, 6]
Run Code Online (Sandbox Code Playgroud)

我目前的解决方案是一个功能,但仅仅是出于我的求知欲,我想知道是否可以用一个列表理解来做到这一点?

Amb*_*ber 6

列表推导不是为扁平化而设计的(因为它们没有办法组合对应于多个输入项的值).

虽然您可以使用嵌套列表推导来解决这个问题,但这需要您的顶级列表中的每个元素都是可迭代的.

老实说,只需使用一个功能.这是最干净的方式.

  • @cjauvin:这里的问题是第二个`for sublist`部分中的item要求子列表实际上是可迭代的,而集合中的`1`和`2`元素不是这种情况.要解决这个问题,你必须从标量元素中创建单元素迭代 - 这是可行的,就像发送者所显示的那样,但是它是否是你应该做的事情是值得怀疑的. (2认同)