Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/341.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何求一个数与它的差';s仅当较早的数字小于当前数字时,python列表中的较早数字_Python_Python 3.x_List - Fatal编程技术网

如何求一个数与它的差';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大于较低的索引编号时进行减法。“但是结果列表的长度不同”没有得到这一部分。结果列表的长度与输入列表的长度不同