我有这样的数据结构
[[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。我想要的输出完全像我之前所示。
谢谢!
答案 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]
这可以是一个选项!