为了账号安全,请及时绑定邮箱和手机立即绑定

Python如何对列表空字符赋值,每个字符串都以上一个检索到存在的值作为基数自增

Python如何对列表空字符赋值,每个字符串都以上一个检索到存在的值作为基数自增

犯罪嫌疑人X 2019-02-16 22:48:36
之前有一个文档,我对其中的数值要进行自动化添加,但是里面的数值是无序的,每当遇到一个值为空的元素都要向上找到最后一个数值进行自增,并且要算上中间有多少个空的值就循环几次 经过我处理了过后,文档已经能够自动判断添加过后的新dict.keys,但我始终无法完成自增这一块的逻辑和方法 相关代码 def do_str_2(): dict1 = [] dict2 = [] count = 0 with open(sys.path[0]+'/success.txt','r') as f: for f in f.readlines(): if '=' in f: f = f.replace('\n','').replace(',','').split('=') f[0] = f[0].strip() f[1] = f[1].strip() # print(f) result_dict[f[0]] = f[1] else: f = f.replace('\n','').split(',') if len(f) > 1: f[0] = f[0].strip() f[1] = f[1].strip() # print(f) result_dict[f[0]] = f[1] for value in result_dict.values(): dict1.append(value) print(dict1) 最终处理完成后得到的结果是这样一个列表,这个列表就是字典的值 ['00', '01', '', '', '100000', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '10100', '10200', '200000', '', '', '', '', '', '20100', '20200', '1', '', '', '', '100', '101', '102', '103', '111', '112', '114', '115', '120', '121', '123', '124', '199', '10000', '10002', '10003', '10100', '10102'] 我最终要得到的结果为下面的列表一样,但是里面的值是根据上一个最后不为空的值进行添加的,比如说 ['00', '01', '', '']那么现在里面有两个空元素就应该找到01这个值作为基数来循环两次,结果就为['00', '01', '02', '03'],求大神解答 ['00', '01', '02', '03', '100000', '100001', '100002', '100003', '100004', '100005', '100006', '100007', '100008', '100009', '100010', '100011', '100012', '100013', '100014', '100015', '100016', '100017', '10100', '10200', '200000', '200001', '200002', '200003', '200004', '200005', '20100', '20200', '1', '2', '3', '4', '100', '101', '102', '103', '111', '112', '114', '115', '120', '121', '123', '124', '199', '10000', '10002', '10003', '10100', '10102']
查看完整描述

3 回答

?
慕尼黑的夜晚无繁华

TA贡献1864条经验 获得超6个赞

参考

def foo(ls):
    assert ls and ls[0] != ''
    ls2 = list(ls)
    for i in range(len(ls2)):
        if ls2[i] == '':
            ls2[i] = str(int(ls2[i-1]) + 1)
    return ls2
查看完整回答
反对 回复 2019-03-01
?
30秒到达战场

TA贡献1828条经验 获得超6个赞

楼上的少了一个补零的操作,在这里补上

def foo(lst):
    for i, _ in enumerate(lst):
        if not _:
            lst[i] = str(int(lst[i - 1]) + 1).zfill(len(lst[i - 1]))
    return lst

lst = ['00', '01', '', '', '100000', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '10100', '10200', '200000', '', '', '', '', '', '20100', '20200', '1', '', '', '', '100', '101', '102', '103', '111', '112', '114', '115', '120', '121', '123', '124', '199', '10000', '10002', '10003', '10100', '10102']
print foo(lst)
查看完整回答
反对 回复 2019-03-01
?
翻阅古今

TA贡献1780条经验 获得超5个赞

list(reduce(lambda a,b: a+[b] if b else a+[str(int(a[-1])+1).zfill(len(a[-1]))], [s[:1]]+s[1:]))

缺点就是不够直观, 2333

查看完整回答
反对 回复 2019-03-01
  • 3 回答
  • 0 关注
  • 1100 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信