python假如第二列数字连续,则输出开始和结束的值
菜鸟求助,生物狗自学python好难。感觉语法和逻辑都还可以,也学习了一段时间了,但是经常卡壳.......示例数据:
location1..100000
location1..100001
location1..100002
location1..100003
location1..100004
location1..100005
location1..100008
location1..100009
location1..100010
location2..100000
location2..100001
location2..100002
location2..100003
location2..100004
location2..100005
location2..100006
location3..100018
location3..100019
location3..100020
location3..100021
location3..100022
location3..100026
location3..100027
location3..100028
location3..100029
location3..100030
location3..100031
location3..100032
location3..100033
我的数据格式如上所示,数据是按顺序排列的。假如以'..'分割为两列。假如第一列相同,第二列数字是连续(后一行比前一行大1),则输出第一列,加上第二列数字(开始的行数字,结束的行数字),以及对这些连续的行累加。(相当于这样连续的为一个区块,一个区块输出为一行)
比如前6行的第一列相同,第二列都连续,则输出: location1 100000 100005 6
而第七行,虽然第一列相同,但是第二列不符合标准(标准:后一行比前一行大1),所以又算作从新的一个区块,另输出一行。
想要达到的输出结果格式:
location1 100000 100005 6
location1 100008 100010 3
location2 100000 100006 7
location3 100018 100022 5
location3 100026 100033 8
本帖最后由 傻眼貓咪 于 2021-12-23 16:29 编辑
因为我现在用手机笔记本写的,代码有点长,懒得优化:data = """location1..100000
location1..100001
location1..100002
location1..100003
location1..100004
location1..100005
location1..100008
location1..100009
location1..100010
location2..100000
location2..100001
location2..100002
location2..100003
location2..100004
location2..100005
location2..100006
location3..100018
location3..100019
location3..100020
location3..100021
location3..100022
location3..100026
location3..100027
location3..100028
location3..100029
location3..100030
location3..100031
location3..100032
location3..100033"""
arr = [(list(item.split("..")), int(list(item.split("..")))) for item in data.split("\n")]
sorted(arr, key = lambda x: x)
x = arr
y = arr
res = []
temp = []
for n, each in enumerate(arr):
a, b = each
if(a != x or b != y):
res.append(temp)
temp = [(a, b)]
x = a
y = b+1
elif n == len(arr)-1:
temp.append((a, b))
res.append(temp)
else:
temp.append((a, b))
y += 1
del arr
for each in res:
print(each, each, each[-1], each[-1]-each+1)结果:location1 100000 100005 6
location1 100008 100010 3
location2 100000 100006 7
location3 100018 100022 5
location3 100026 100033 8 傻眼貓咪 发表于 2021-12-23 16:20
因为我现在用手机笔记本写的,代码有点长,懒得优化:结果:
感谢帮助,祝圣诞快乐~ poppy章鱼 发表于 2021-12-23 17:17
感谢帮助,祝圣诞快乐~
圣诞快乐{:10_327:}{:10_298:} 傻眼貓咪 发表于 2021-12-23 16:20
因为我现在用手机笔记本写的,代码有点长,懒得优化:结果:
厉害,手机笔记本上就搞定了。。
不过,排序应该用就地排序吧,因为你后面用的是arr,而sorted()不是就地排序,
故arr并没有进行排序。这个结果正确,是因为刚好原来就是排好序的。
其次,你这个几个判断逻辑,让我琢磨了一个多小时才理解,佩服你,逻辑方面看来我比较缺乏训练 {:10_266:}
而我一开始用的是Pandas或SQL来解决,理解上稍微直观些,但需要熟悉pandas或SQL。。 阿奇_o 发表于 2021-12-23 18:41
厉害,手机笔记本上就搞定了。。
不过,排序应该用就地排序吧,因为你后面用的是arr,而sorted()不是就 ...
哈哈,只能说我手机不好使啊,{:10_266:}
页:
[1]