python - 仅当较早的数字小于当前数字时,如何在python列表中查找数字与较早数字的差异
问题描述
我有一个清单
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
有没有更好的方法呢,嵌套循环有点过度杀戮和耗时
解决方案
您需要两个循环,但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)
推荐阅读
- angular - 过滤器功能没有重新输入原始数组
- spring - Spring Boot 中配置文件的默认值
- javascript - 我如何使用 flexbox 和 Vue.js 将我在右侧发送的蓝色消息和我在左侧接收到的黄色消息组合在一起?
- c# - 使用 RenderPartial 从 URL 传递值到另一个视图
- animation - OpenGL/如何停止 glutTimerFunc?
- haproxy - haProxy:如何在 URL 中保留 haproxy IP
- sqlite - 如果名称存在,则插入触发器之前的 sqlite 以插入或更新
- c# - 在 Rider IDE 中创建类依赖关系图
- python - 保存 Tensorflow 模型并将其加载到 Tensorflow.js
- flash - 错误应用程序加载器“CFBundleIcons”:“icon.png”