Python 板


LINE

※ 引述《PTT007 (优质单身好男人)》之铭言: : 如果我有一个txt内容如下: : 0.01 : 0.02 : 0.03 : 0.09 : 1.03 : 1.02 : 1.01 : 我想将 0.X 和 1.X 各自累加起来 : 输出结果为 0.15 和 3.06 : 我目前的做法是 : number_of_line = len(txt) # txt总共几行 : result = 0 : for i in range(2): : for j in range(number_of_line): : if i == int(current_row_value): : result += current_row_value : print result : result = 0 : 但我这样写,资料量多的话就会跑很久 : 请问有其他较好的方法吗 : 谢谢 txt = open("input.txt") s = txt.readline() # 先读一行进来 result1 = 0 # 一次就可以做完,loop两次干嘛? result2 = 0 while s != '': # 检查档案尾 if s[0] == '0': # 如果你很确定只有 0 和 1 需要分开的话... result1 += float(s) else: result2 += float(s) s = txt.readline() # 进下一行 print(result1, result2) -- 你喜欢下列哪一个学妹? 1. 虽然吉他弹得比学姊好,在乐团里却甘愿只当个副手 2. 拥有夏天一到必然黑化的体质,连同学好友都认不出来 3. 虽然嘴巴很严厉,但只要用甜点就可以收买,尤其喜欢鲷鱼烧 4. 讨厌学姊给她取的奇怪绰号,却给小猫取了同一个名字 5. 极力维持自己严肃的形象,但是一戴上猫耳就会不自觉喵喵叫 --



※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 123.110.141.102
※ 文章网址: http://webptt.com/cn.aspx?n=bbs/Python/M.1412872665.A.EF6.html
1F:→ PTT007: 不只0和1,还会有23456...等 10/10 00:45
那就多设几个 result23456...,下面多几个 elif 啊! 不过还有更简单的。 先把上面的 result1, result2 改成 result = [0] * 10 下面的 while loop 改成 while s != '' result[int(s[0])] += float(s) s = txt.readline() 唔,这样比原来还更简洁耶。 ※ 编辑: wohtp (123.110.141.102), 10/10/2014 00:58:33 ※ 编辑: wohtp (123.110.141.102), 10/10/2014 01:00:54
2F:→ PTT007: 可能会有上百个,不可能设这麽多elif吧QQ 10/10 01:16
3F:→ PTT007: 下面那方法我再看一下 感谢~ 10/10 01:20
你只说 0 和 1,我就只分 0 和 1;你只说有23456...,我就只分个位数。 不讲清楚谁知道你需要什麽 -_- ※ 编辑: wohtp (123.110.141.102), 10/10/2014 01:28:17
4F:→ PTT007: 呃 我後面不是有打....吗 就表示那会延伸下去阿 =.= 10/10 01:29
5F:→ PTT007: 另一个方法刚试了OK~感谢您~ 10/10 01:33
6F:→ bigpigbigpig: 那就用 split() 啊,第一个元素当做 dict 的 key 10/10 12:06
7F:推 goodseeyou: 这个方法比较好 10/11 00:57
8F:→ goodseeyou: 虽然需要知道值域范围 跟有可能浪费 memory 但应不是 10/11 01:00
9F:→ goodseeyou: 问题 10/11 01:00
用dict不需要知道值域范围吧,看到几个加几个key进去就是了。 以下是大猪大猪大的建议: result = {} # 空的 dict s = txt.readline() while s != '': intPart = s.split(',')[0]    # 把整数部分拉出来 if intPart in result: # 测看看是否已经有这一项了 result[intPart] += float(s) # 有就直接加在一起 else: result[intPart] = float(s) # 没有的话要多添这项 s = text.readline() 只有 0 和 1 有只有 0 和 1 的写法,只有个位数有只有个位数的写法, 中间不跳号有中间不跳号的写法,资料有没有排序也当然有差。 现在这个是最一般,什麽(abcd.wxyz)这种形式丢进去都能处理的程式。 可是也必然比较大比较慢。 ※ 编辑: wohtp (123.110.141.102), 10/11/2014 01:33:30 ※ 编辑: wohtp (123.110.141.102), 10/11/2014 01:33:49 ※ 编辑: wohtp (123.110.141.102), 10/11/2014 01:34:54
10F:推 ckclark: split应该是. 另外result = defaultdict(float)更方便 10/11 02:25







like.gif 您可能会有兴趣的文章
icon.png[问题/行为] 猫晚上进房间会不会有憋尿问题
icon.pngRe: [闲聊] 选了错误的女孩成为魔法少女 XDDDDDDDDDD
icon.png[正妹] 瑞典 一张
icon.png[心得] EMS高领长版毛衣.墨小楼MC1002
icon.png[分享] 丹龙隔热纸GE55+33+22
icon.png[问题] 清洗洗衣机
icon.png[寻物] 窗台下的空间
icon.png[闲聊] 双极の女神1 木魔爵
icon.png[售车] 新竹 1997 march 1297cc 白色 四门
icon.png[讨论] 能从照片感受到摄影者心情吗
icon.png[狂贺] 贺贺贺贺 贺!岛村卯月!总选举NO.1
icon.png[难过] 羡慕白皮肤的女生
icon.png阅读文章
icon.png[黑特]
icon.png[问题] SBK S1安装於安全帽位置
icon.png[分享] 旧woo100绝版开箱!!
icon.pngRe: [无言] 关於小包卫生纸
icon.png[开箱] E5-2683V3 RX480Strix 快睿C1 简单测试
icon.png[心得] 苍の海贼龙 地狱 执行者16PT
icon.png[售车] 1999年Virage iO 1.8EXi
icon.png[心得] 挑战33 LV10 狮子座pt solo
icon.png[闲聊] 手把手教你不被桶之新手主购教学
icon.png[分享] Civic Type R 量产版官方照无预警流出
icon.png[售车] Golf 4 2.0 银色 自排
icon.png[出售] Graco提篮汽座(有底座)2000元诚可议
icon.png[问题] 请问补牙材质掉了还能再补吗?(台中半年内
icon.png[问题] 44th 单曲 生写竟然都给重复的啊啊!
icon.png[心得] 华南红卡/icash 核卡
icon.png[问题] 拔牙矫正这样正常吗
icon.png[赠送] 老莫高业 初业 102年版
icon.png[情报] 三大行动支付 本季掀战火
icon.png[宝宝] 博客来Amos水蜡笔5/1特价五折
icon.pngRe: [心得] 新鲜人一些面试分享
icon.png[心得] 苍の海贼龙 地狱 麒麟25PT
icon.pngRe: [闲聊] (君の名は。雷慎入) 君名二创漫画翻译
icon.pngRe: [闲聊] OGN中场影片:失踪人口局 (英文字幕)
icon.png[问题] 台湾大哥大4G讯号差
icon.png[出售] [全国]全新千寻侘草LED灯, 水草

请输入看板名称,例如:Gossiping站内搜寻

TOP