为了账号安全,请及时绑定邮箱和手机立即绑定

仅当较早的数字小于当前数字时,如何在python列表中查找数字与较早数字的差异

仅当较早的数字小于当前数字时,如何在python列表中查找数字与较早数字的差异

MM们 2022-10-11 21:38:25
我有一个清单my_list = [6, 9, 10, 0, 5]如何编写代码以获取一个数字与其早期数字的所有差异的列表,前提是它大于早期数字my_list[0]没有更早的号码my_list[1] = 9这比my_list[0]我们能找到的差别更大9-6 = 3。现在answer_list=[3]。my_list[2] = 10大于my_list[0],my_list[1] answer_list = [3, 1, 4]my_list[3] = 0没有前一个数字小于2。没做什么my_list[4] = 5. my_list[3]小于my_list[4]。answer_list = [3, 1, 4, 5]应该return [3, 1, 4, 5]我的解决方案是def ans(my_list):    new_list = []    for x in my_list:        for i in range(my_list.index(x)):            if x >= my_list[i]:                diff = x - my_list[i]                new_list.append(diff)    return new_list有没有更好的方法呢,嵌套循环有点过度杀戮和耗时
查看完整描述

1 回答

?
慕森王

TA贡献1777条经验 获得超3个赞

您需要两个循环,但index如果您使用enumerate.


my_list = [6, 9, 10, 0, 5]


result = []

for index, value in enumerate(my_list[1:], start=1):

    for previous_value in my_list[:index]:

        difference = value - previous_value

        if difference > 0:

            result.append(difference)


print(result)

奖励:如果您在原始列表中有重复的数字,您的算法就会出现问题,例如[6, 9, 10, 9, 10, 0, 5]. 这种方法可以解决它。你的结果:[3, 4, 1, 3, 4, 1, 5],正确的结果:[3, 4, 1, 3, 4, 1, 1, 5]


嵌套较少,但可读性较差:


result = []

for index, value in enumerate(my_list[1:], start=1):

    result.extend(filter(lambda x: x > 0, (value - previous_value for previous_value in my_list[:index])))

print(result)


查看完整回答
反对 回复 2022-10-11
  • 1 回答
  • 0 关注
  • 99 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信