如何将含fuzz.ratio的嵌套for循环改写为列表推导式?
嵌套循环转列表推导式解决方案
首先纠正你原代码里的缩进问题——scores.append(score)得缩进在内部for y循环里,不然最后只会把最后一次计算的score加入列表,正确的循环写法是:
scores = [] for x in df1_names: for y in df2_names: score = fuzz.ratio(x,y) scores.append(score) # 缩进至内部循环内
转一维列表推导式
如果只是要生成所有fuzz.ratio结果的一维列表,直接把计算逻辑放在最前面,循环顺序和原代码一致即可:
scores = [fuzz.ratio(x, y) for x in df1_names for y in df2_names]
转二维矩阵(对应你尝试的嵌套推导式)
如果想生成二维矩阵(每行对应一个x,每列对应一个y),把内层列表推导式里的x替换成fuzz.ratio(x,y)就行,注意循环顺序:
matrix = [[fuzz.ratio(x, y) for y in df2_names] for x in df1_names]
要是你想让外层循环对应y、内层对应x,调整循环顺序即可:
matrix = [[fuzz.ratio(x, y) for x in df1_names] for y in df2_names]
说白了,列表推导式的核心就是**「要生成的元素」 + 「循环条件」**,嵌套推导式就是外层推导式生成每个子列表,子列表里的推导式生成具体元素,把fuzz.ratio(x,y)这个计算结果放到对应位置就搞定了。
内容的提问来源于stack exchange,提问作者jacktheripper
相关产品推荐
相关产品推荐

