如何求一个数与它的差';s仅当较早的数字小于当前数字时,python列表中的较早数字
我有一张单子如何求一个数与它的差';s仅当较早的数字小于当前数字时,python列表中的较早数字,python,python-3.x,list,Python,Python 3.x,List,我有一张单子 my_list = [6, 9, 10, 0, 5] 如何编写代码,仅当某个数字大于先前的数字时,才能获得该数字与先前数字之间所有差异的列表 我的列表[0]没有较早的编号 my_list[1]=9大于my_list[0]我们可以找到差异9-6=3。现在答案列表=[3] my_list[2]=10大于my_list[0],my_list[1]answer_list=[3,1,4] my_list[3]=0以前没有一个数字小于2。无所事事 我的列表[4]=5我的列表[3]小于我的列表
my_list = [6, 9, 10, 0, 5]
如何编写代码,仅当某个数字大于先前的数字时,才能获得该数字与先前数字之间所有差异的列表
我的列表[0]
没有较早的编号
my_list[1]=9
大于my_list[0]
我们可以找到差异9-6=3
。现在答案列表=[3]
my_list[2]=10
大于my_list[0]
,my_list[1]
answer_list=[3,1,4]
my_list[3]=0
以前没有一个数字小于2
。无所事事
我的列表[4]=5
<代码>我的列表[3]小于我的列表[4]
<代码>答案列表=[3,1,4,5]
应该返回[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
有没有更好的方法可以做到这一点,嵌套循环有点过死,而且很耗时您需要两个循环,但是如果您使用
枚举
,您可以不再需要使用索引
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)
解决方案的问题不在于它一定很慢,而是结果列表的长度不同,可能会丢失重要信息。也许考虑将零点留在结果列表中?这也允许你们从集合列表中减去两个,然后替换负数(或者完全删除它们)。但我们不需要负数。仅当较高的索引编号id大于较低的索引编号时进行减法。“但是结果列表的长度不同”没有得到这一部分。结果列表的长度与输入列表的长度不同