仅列出仅列表的子项

时间:2016-06-06 14:25:00

标签: python list list-comprehension

我有这样的数据结构

[[1,2,3,4,5], {9,2,5,8,7}, (7, 4, 8, 6)]

包含列表,集和元组的一个大列表。

我希望将列表中的所有内容乘以3,而不是将元组或集合中的内容相乘。输出应该是:

[[3,6,9,12,15], {9,2,5,8,7}, (7, 4, 8, 6)]

列表中的项目全部乘以3,其余部分保持不变。

我试过这个:

l = [[2,6,9,13,15], {9,2,5,8,7}, (7, 4, 8, 6)]
newList = [[subitem*3 for subitem in subList ] for subList in l]
print(newList)

但这给了我糟糕的输出:

[[3, 6, 9, 12, 15], [24, 27, 6, 15, 21], [21, 12, 24, 18]]   

列表很好,但是set和tuple需要保持不变,它们也不应该转换为list。我想要的输出完全像我之前所示。

谢谢!

3 个答案:

答案 0 :(得分:1)

您可以使用此理解模式:new_list = [[3*y for y in x] if isinstance(x, list) else x for x in l]

{{1}}

查看here以获取更多讨论。

答案 1 :(得分:1)

您提供的代码非常接近,您需要做的就是添加一个检查,如果subList是一个列表,那么如果是这样,则单独使用其他内容。

l = [[2,6,9,13,15], {9,2,5,8,7}, (7, 4, 8, 6)]
newList = [[subitem*3 for subitem in subList ] if type(subList) is list else subList for subList in l]
print(newList)

答案 2 :(得分:1)

newList = [[subitem*3 for subitem in subList ] if isinstance(subList, list) else subList for subList in l]

这可以是一个选项!