亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

將數字序列折疊到范圍內

將數字序列折疊到范圍內

Cats萌萌 2021-06-11 13:01:53
今天我正在請求幫助我正在編寫的 Python 腳本;我正在使用 CSV 模塊來解析一個大約有 1,100 行的大文檔,并且從每一行中提取一個 Case_ID,這是一個其他行沒有的唯一編號。例如:['10215', '10216', '10277', '10278', '10279', '10280', '10281', '10282', '10292', '10293','10295', '10296', '10297', '10298', '10299', '10300', '10301', '10302', '10303', '10304','10305', '10306', '10307', '10308', '10309', '10310', '10311', '10312', '10313', '10314','10315', '10316', '10317', '10318', '10319', '10320', '10321', '10322', '10323', '10324','10325', '10326', '10344', '10399', '10400', '10401', '10402', '10403', '10404', '10405','10406', '10415', '10416', '10417', '10418', '10430', '10448', '10492', '10493', '10494','10495', '10574', '10575', '10576', '10577', '10578', '10579', '10580', '10581', '10582','10583', '10584', '10585', '10586', '10587', '10588', '10589', '10590', '10591', '10592','10593', '10594', '10595', '10596', '10597', '10598', '10599', '10600', '10601', '10602','10603', '10604', '10605', '10606', '10607', '10608', '10609', '10610', '10611', '10612','10613', '10614', '10615', '10616', '10617', '10618', '10619', '10620', '10621', '10622','10623', '10624', '10625', '10626', '10627', '10628', '10629', '10630', '10631', '10632','10633', '10634', '10635', '10636', '10637', '10638', '10639', '10640', '10641', '10642','10643', '10644', '10645', '10646', '10647', '10648', '10649', '10650', '10651', '10652','10653', '10654', '10655', '10656', '10657', '10658', '10659', '10707', '10708', '10709','10710', '10792', '10793', '10794', '10795', '10908', '10936', '10937', '10938', '10939','11108', '11109', '11110', '11111', '11112', '11113', '11114', '11115', '11116', '11117','11118', '11119', '11120', '11121', '11122', '11123', '11124', '11125', '11126', '11127','11128', '11129', '11130', '11131', '11132', '11133', '11134', '11135', '11136', '11137','11138', '11139', '11140', '11141', '11142', '11143', '11144', '11145', '11146', '11147',正如您所看到的,這個列表非常豐富,所以我想在我的腳本中包含一個小函數,它可以將所有順序范圍縮小到某種帶連字符的書擋,例如 10,277 - 10,282。感謝所有人提供的任何幫助!祝你有美好的一天。
查看完整描述

3 回答

?
慕妹3242003

TA貢獻1824條經驗 獲得超6個贊

可行。讓我們看看這是否可以用熊貓來完成。


import pandas as pd


data = ['10215', '10216', '10277', ...]

# Load data as series.

s = pd.Series(data)

# Find all consecutive rows with a difference of one 

# and bin them into groups using `cumsum`. 

v = s.astype(int).diff().bfill().ne(1).cumsum() 

# Use `groupby` and `apply` to condense the consecutive numbers into ranges.

# This is only done if the group size is >1.

ranges = (

    s.groupby(v).apply(

        lambda x: '-'.join(x.values[[0, -1]]) if len(x) > 1 else x.item()).tolist())

print (ranges)

['10215-10216',

 '10277-10282',

 '10292-10293',

 '10295-10326',

 '10344',

 '10399-10406',

 '10415-10418',

 '10430',

 '10448',

 '10492-10495',

 '10574-10659',

 '10707-10710',

 '10792-10795',

 '10908',

 '10936-10939',

 '11108-11155',

 '11194-11235',

 '10101-10102',

 '10800',

 '11236']

您的數據必須進行排序才能正常工作。


查看完整回答
反對 回復 2021-06-16
?
慕村9548890

TA貢獻1884條經驗 獲得超4個贊

還有pynumparser包:


import pynumparser         


pynumparser.NumberSequence().encode([1, 2, 3, 5, 6, 7, 8, 10])

# result: '1-3,5-8,10'


pynumparser.NumberSequence().parse('1-3,5-8,10')              

# result: (1, 2, 3, 5, 6, 7, 8, 10)


查看完整回答
反對 回復 2021-06-16
  • 3 回答
  • 0 關注
  • 227 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號