python - 嵌套的元组列表和分数列表
问题描述
我有问题,我会尽力解释。我有两个列表,每个列表包含 3 个项目。list1 中的每个项目在 list2 中都有一个分数。
List1= [[(3,4,5)], [(23,44), (23,5,3), (1,2)], [(23,5), (1,6)]]
List2= [2,4,1]
正如您在 list1 中看到的,项目 2 和 3 有多个对应于它们的分数的元组,我想将它们分成它们的分数:
what I want:
List1= [(3,4,5), (23,44), (23,5,3), (1,2), (23,5), (1,6)]
List2= [2,4,4,4,1,1]
or
List1= [[(3,4,5)], [(23,44)], [(23,5,3)], [(1,2)], [(23,5)], [(1,6)]]
List2= [2,4,4,4,1,1]
到目前为止,我已经确定了需要更改的项目。
double = [x for x in List1 if len(x)>1]
print(double)
[[(23, 44), (23, 5, 3), (1, 2)], [(23, 5), (1, 6)]]
我找到了这些项目的索引:
indx = [i for y in double for i, x in enumerate(List1) if x== y ]
print(indx)
[1, 2]
我已经展平了嵌套列表以在 list1 中获得我想要的内容:
flat_list = [item for sublist in List1 for item in sublist]
[(3, 4, 5), (23, 44), (23, 5, 3), (1, 2), (23, 5), (1, 6)]
但是我不确定如何更改 list2。
任何帮助将不胜感激。
谢谢你。
解决方案
一种方法(这些问题往往引出的神秘单线):
l1, l2 = zip(*((tpl, scr) for tpls, scr in zip(List1, List2) for tpl in tpls))
l1
# ((3, 4, 5), (23, 44), (23, 5, 3), (1, 2), (23, 5), (1, 6))
l2
# (2, 4, 4, 4, 1, 1)
嵌套的生成器表达式生成元组分数对,并且该zip(*...)
模式将它们转置为我们通过多重赋值捕获的两个单独的元组。如果需要,您可以轻松地将它们转换为列表。
一种更具可读性和对初学者友好的方式:
tuples, scores = [], []
for tpls, scr in zip(List1, List2):
for tpl in tpls:
tuples.append(tpl)
scores.append(scr)
tuples
# [(3, 4, 5), (23, 44), (23, 5, 3), (1, 2), (23, 5), (1, 6)]
scores
# [2, 4, 4, 4, 1, 1]
推荐阅读
- amazon-web-services - 我们如何用 PHP AWS SDK 替换 API 网关调用?
- r - 从r中的长表创建一个对称矩阵
- javascript - 在某些页面上使用 Hummus.js 编辑 PDF 问题
- python - OpenModelica 问题(ModelicaSystem 错误)
- android - 从手机上传图片时出错
- javascript - 将谷歌驱动器选择器文件转换为 javascript 文件类型
- azure - 以 KQL 形式汇总每个银行和每天的数据
- terraform - aws_s3_bucket 上的 Terraform 导入询问我 acl=private 和 grants 块
- database - 在 oracle 中插入额外的相同行数但具有负值
- c# - TelerikCombobox 用于 itemtemplate 中的 blazor 搜索