Python数字展开问题:如何正确迭代重复数字生成对应位值列表
问题描述
现有数字746342,期望生成展开形式的列表:[700000, 40000, 6000, 300, 40, 2]。但运行以下代码后:
def expanded_form(num): row = str(num).strip() row_2 = ([int(i) * 10**(len(row)-row.index(i)-1) for i in row]) print(row_2) expanded_form(746342)
得到的错误结果是:[700000, 40000, 6000, 300, 40000, 2]——第二个4被错误计算成了第一个4的位值(40000),而非正确的40。
问题原因与修复
问题出在row.index(i)这个方法上:它只会返回当前字符在字符串中第一次出现的索引,所以第二个4调用row.index('4')时,拿到的是第一个4的位置(索引1),导致计算出错误的位值。
要解决这个问题,应该直接遍历每个字符的真实位置,用enumerate()函数同时获取索引和字符即可:
修正后的代码:
def expanded_form(num): row = str(num).strip() # 用enumerate拿到每个字符的索引idx和字符本身i row_2 = [int(i) * 10 ** (len(row) - idx - 1) for idx, i in enumerate(row)] print(row_2) expanded_form(746342)
运行这段代码后,会输出正确的结果:[700000, 40000, 6000, 300, 40, 2]
内容的提问来源于stack exchange,提问作者Sergey
相关产品推荐
相关产品推荐

