关于处理这样的数据......

2018-08-30 14:41:40 +08:00
 a476286557
有这样一个列表:list = [9,4,5,6,5,4,7,7,6]
因为 9,4 是下降的,所以处理成 ret1 = [9,4]
4,5,6 是上升的,所以处理为 ret2 = [4,6]
6,5,4 是下降的,所以处理为 ret3 = [6,4]
应该怎样处理,才能成为这样的呢?
2530 次点击
所在节点    Python
17 条回复
xpresslink
2018-08-30 14:44:37 +08:00
处理很容易,但是楼主的需求逻辑表述不清楚。
a476286557
2018-08-30 14:49:09 +08:00
@xpresslink 不好意思,我再描述一下.
像上述列表, 9,4 是属于下降趋势,所以把它存为[9,4],就是只存下降的起,始
4,5,6 这一段属于上升趋势,存这段的起,始,就是存为[4,6] ..
不知道这样表达是否可以
ballshapesdsd
2018-08-30 14:50:51 +08:00
遍历一遍不就好了
klesh
2018-08-30 14:59:36 +08:00
拐点的特征很明显啊
凸拐点: a[i - 1] < a[i] and a[i] > a[i + 1]
凹拐点: a[i - 1] > a[i] and a[i] < a[i + 1]
通过拐点特征, 配合边界值处理, 再用一个临时变量存上一个拐点, 就能整理出你想要的格式了.
xpresslink
2018-08-30 15:01:29 +08:00
@a476286557 那个 4 被前面 9 4 给消耗掉么? 7 7 怎么处理?
a476286557
2018-08-30 15:02:42 +08:00
@xpresslink 不消耗,7 7 按照下降处理
a476286557
2018-08-30 15:03:05 +08:00
@klesh 谢谢,我试试
a476286557
2018-08-30 15:03:56 +08:00
@ballshapesdsd 遍历过程中不会处理..
PureWhiteWu
2018-08-30 15:26:28 +08:00
怎么感觉是特别基础的算法题。。。找拐点的问题。。。。
下次面试可以试试这题。
a476286557
2018-08-30 15:30:24 +08:00
@PureWhiteWu 大佬,我是新手上路,帮帮忙...
Yourshell
2018-08-30 15:54:34 +08:00
一个循环判断 n 与 n+1 的大小保留为标识符
a476286557
2018-08-30 17:10:42 +08:00
@klesh 谢谢大佬指点~
xpresslink
2018-08-30 18:11:49 +08:00
def check_sort(arg_list: list):
□□□□if arg_list[-2] == arg_list[-1]:
□□□□□□□□arg_list[-2] += 0.1
□□□□if arg_list == sorted(arg_list, reverse=True):
□□□□□□□□return 'DESC'
□□□□if arg_list == sorted(arg_list):
□□□□□□□□return 'ASC'
□□□□else:
□□□□□□□□return 'None'

source_list = [9,4,5,6,5,4,7,7,6]

result = {'ASC': [], 'DESC': []}

length = len(source_list)
temp_list = source_list[:2]

i = 2
while True:

□□□□sort_status = check_sort( temp_list + [source_list[i]])

□□□□if sort_status == 'None':
□□□□□□□□result[check_sort(temp_list)].append([temp_list[0], temp_list[-1]])
□□□□□□□□temp_list = [temp_list[-1], source_list[i]]
□□□□else:
□□□□□□□□temp_list.append(source_list[i])

□□□□i += 1
□□□□if length == i:
□□□□□□□□result[check_sort(temp_list)].append([temp_list[0], temp_list[-1]])
□□□□□□□□break

print(result)

{'ASC': [[4, 6], [4, 7]], 'DESC': [[9, 4], [6, 4], [7, 6]]}
whoami9894
2018-08-30 18:32:53 +08:00
```python
def sort(x):
temp_high = 0
temp_low = 0
result = []
for i in range(len(x)):
if i == 0:
continue
if i == len(x) - 1:
if x[i] <= x[i-1]:
result.append((x[temp_high], x[i]))
else:
result.append((x[temp_low], x[i]))
continue
if x[i]>=x[i+1] and x[i]>x[i-1]:
temp_high = i
result.append((x[temp_low], x[i]))
elif x[i]<=x[i-1] and x[i]<x[i+1]:
temp_low = i
result.append((x[temp_high], x[i]))
else:
continue
return result
a = [9,4,5,6,5,4,7,7,6]
print(sort(a))

```
```
[(9, 4), (4, 6), (6, 4), (4, 7), (7, 6)]
```
whoami9894
2018-08-30 18:33:55 +08:00
@whoami9894
手机上的飘号好像有点问题
a476286557
2018-08-31 09:13:11 +08:00
@xpresslink 谢谢!
a476286557
2018-08-31 09:13:21 +08:00
@whoami9894 谢谢!

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/484564

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX