免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 3353 | 回复: 3

字符串数据调整顺序后输出 [复制链接]

论坛徽章:
0
发表于 2014-11-29 22:17 |显示全部楼层
目标追求最高效率

  1. #原始文本数据如下
  2. Server04       6       919364946       91688146133167f0        64006106688114f3        1411042252292b0800      316568  2624731 6       ;
  3. Server04       2       919382418       91688186665165f8        64006116689035f6        1411042250472b0800      1248    1752    1157632026      ;
  4. Server04       2       919382418       91688186665165f8        64006116689035f6        1411042250472b0800      1248    1752    1157632026      ;
  5. #对文本行处理,讲第四列读入数组的a[3], 我需要对a[3]调整输出格式得到最终需要的手机号

  6. a[3]=91688146133167f0
  7. #处理规则如下
  8. 前四位去除 后面12位,两两奇偶对调,最后删掉f
  9. 9168  8<->1  8<->6  6<->6 5<->1 6<->5 f <->8  = 18686615568

  10. ##下面是王老师和充气老师的答案,仅供参考
  11.             a = line.split()
  12.             d = a[3][5]+a[3][4]+a[3][7]+a[3][6]+a[3][9]+a[3][8]+a[3][11]+a[3][10]+a[3][13]+a[3][12]+a[3][15]

  13. awk -F ''   '{gsub('/[A-Za-z]/',"",$0);for(i=5;i<=NF-1;i+=2)printf"%d%d",$(i+1),$i;}END{print $NF}' 1.txt

  14. awk -F '' '{for(i=5;i<=(NF-2);i+=2)printf $(i+1)""$i}END{print $NF}' <<< '91688186665165f8'

  15. for i in range(len(a)) :
  16.     if i >3 and len(a) -2 > i and not i%2:
  17.           b+= a[i+1] + a[i]

复制代码

论坛徽章:
0
发表于 2014-12-01 17:18 |显示全部楼层
纯属练习,效率的话,目测上面那一个个替换列表值的会快些
  1. >>> from fileinput import input
  2. >>> for line in input('tmp'):
  3. ...     s = line.split()[3]
  4. ...     print ''.join(map(lambda x:x[0]+x[1],zip(s[5::2],s[4::2])))[:-1]
  5. ...
  6. 18643113760
  7. 18686615568
  8. 18686615568
复制代码

论坛徽章:
60
20周年集字徽章-20	
日期:2020-10-28 14:04:3015-16赛季CBA联赛之北京
日期:2016-07-06 15:42:0715-16赛季CBA联赛之同曦
日期:2016-06-12 10:38:0915-16赛季CBA联赛之佛山
日期:2016-05-27 11:54:56黄金圣斗士
日期:2015-12-02 11:44:35白银圣斗士
日期:2015-11-25 14:32:43白银圣斗士
日期:2015-11-23 12:53:352015亚冠之布里斯班狮吼
日期:2015-10-21 16:55:482015亚冠之首尔
日期:2015-09-01 16:46:052015亚冠之德黑兰石油
日期:2015-08-31 11:39:192015亚冠之萨济拖拉机
日期:2015-08-28 21:06:5315-16赛季CBA联赛之广东
日期:2016-07-12 14:58:53
发表于 2014-12-01 18:14 |显示全部楼层
经测试:

a = line.split()
print a[3][5]+a[3][4]+a[3][7]+a[3][6]+a[3][9]+a[3][8]+a[3][11]+a[3][10]+a[3][13]+a[3][12]+a[3][15]


这种方法最快, 还没有找到比这方法更快的了

论坛徽章:
0
发表于 2014-12-01 21:52 |显示全部楼层
回复 3# reyleon
恩。目测是这样,不过也牺牲了灵活性!


   
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP