楼主: 翻滚吧锋哥
2994 19

[其他] 200论坛币求用python写一个for循环计算最长连续0和连续1的值 [推广有奖]

  • 3关注
  • 40粉丝

已卖:5943份资源

博士生

68%

还不是VIP/贵宾

-

威望
0
论坛币
46098 个
通用积分
35.3249
学术水平
9 点
热心指数
13 点
信用等级
6 点
经验
7143 点
帖子
106
精华
0
在线时间
450 小时
注册时间
2014-10-3
最后登录
2024-10-20

楼主
翻滚吧锋哥 发表于 2018-6-28 13:20:12 |AI写论文
1论坛币
答案采纳之后我会发200论坛币给你,还望大侠能出手相助。

下面的list只是一个例子,我实际的数据大概有近十万行,我想请大侠帮我用Python3写一个for循环,计算每一行的字符串中以下值:有几个0(连续0算一次)
最长的0有多少个
最长的1有多少个
举下面list中第一个字符串为例,上面问题的答案应该分别为
2
14
7

list=['000000000000001101111111',
'111111000000000010011111',
'101111111111111111110000',
'001111111001111111111111',
'111111111111111111110011']


最佳答案

xytdhr 查看完整内容

求币大哥T..T
关键词:000001 000100 000010 000011 答案采纳

回帖推荐

yilaozhong 发表于9楼  查看完整内容

前面那位是正则表达式高手,膜拜一下 我是用简单粗暴的循环法做的:

xytdhr 发表于2楼  查看完整内容

求币大哥T..T
代购美国联想七通道(学生教职工)八通道(大企业员工)ThinkPad笔记

沙发
xytdhr 发表于 2018-6-28 13:20:13
求币大哥T..T
  1. import re
  2. import os,sys
  3. list=['000000000000001101111111',
  4. '111111000000000010011111',
  5. '101111111111111111110000',
  6. '001111111001111111111111',
  7. '111111111111111111110011']

  8. i=1#计数器
  9. #把数据保存在本地
  10. #print(os.path.dirname(os.path.realpath(__file__)))
  11. f = open(os.path.dirname(os.path.realpath(__file__))+"\counts.txt",'a')
  12. f.seek(0)
  13. f.truncate()#清空文件

  14. l_times_0=[]#0出现次数
  15. l_longest_0=[]#最长0的个数
  16. l_longest_1=[]#最长1的个数

  17. for num_str in list:        
  18.         print("第%d个字符串"%i)
  19.         #第一步求有多少次0出现,存在变量times_0里面
  20.         re_0 = "0{1,}"
  21.         pattern0 = re.compile(re_0)
  22.         match_0 = pattern0.findall(num_str)#用正则找到所有的0
  23.         times_0 =len(match_0)#2
  24.         
  25.         #第二步求0的最大连续值,存在变量longest_0里面
  26.         counts_0 = [len(i) for i in match_0]#用列表生成式求每次的0出现了多少个
  27.         longest_0 = max(counts_0)#14
  28.         
  29.         #第三步求1的最大连续值,存在变量longest_1里面
  30.         re_1 = "1{1,}"
  31.         pattern1 = re.compile(re_1)
  32.         match_1 = pattern1.findall(num_str)#用正则找到所有的1
  33.         counts_1 = [len(i) for i in match_1]#用列表生成式求每次的1出现了多少个
  34.         longest_1 = max(counts_1)#7
  35.         i+=1
  36.         
  37.         l_times_0.append(times_0)#0出现次数
  38.         l_longest_0.append(longest_0)#最长0的个数
  39.         l_longest_1.append(longest_1)#最长1的个数
  40.         f.write("%d,%d,%d\n"%(times_0,longest_0,longest_1))

  41. f.close()
复制代码


附件: 你需要登录才可以下载或查看附件。没有帐号?我要注册
已有 1 人评分经验 论坛币 学术水平 热心指数 信用等级 收起 理由
yiyi23ttt + 60 + 60 + 1 + 1 + 1 热心帮助其他会员

总评分: 经验 + 60  论坛币 + 60  学术水平 + 1  热心指数 + 1  信用等级 + 1   查看全部评分

藤椅
xytdhr 发表于 2018-6-28 13:57:25

附件: 你需要登录才可以下载或查看附件。没有帐号?我要注册

板凳
翻滚吧锋哥 发表于 2018-6-28 14:21:19
感谢回复,我人在美帝这里很晚了,我明天上午试着运行一下代码,如果可行的话,我会把你的设为最佳答案,并把剩余的论坛币补给你哈。

报纸
xytdhr 发表于 2018-6-28 14:23:04
翻滚吧锋哥 发表于 2018-6-28 14:21
感谢回复,我人在美帝这里很晚了,我明天上午试着运行一下代码,如果可行的话,我会把你的设为最佳答案,并 ...
好的好的,如果有bug再和我说哈~
><

地板
翻滚吧锋哥 发表于 2018-6-28 14:23:06
xytdhr 发表于 2018-6-28 13:57
哦,对了,对于我的那三个问题,我希望把答案分别集中到三个变量中,因为我最终的目的不是以此打印出相应的值。请问你可以帮我修改一下吗,非常感谢了哈。

7
xytdhr 发表于 2018-6-28 14:25:49
翻滚吧锋哥 发表于 2018-6-28 14:23
哦,对了,对于我的那三个问题,我希望把答案分别集中到三个变量中,因为我最终的目的不是以此打印出相应 ...
好的  那我改改直接修改原回复了哈

8
翻滚吧锋哥 发表于 2018-6-28 14:29:39
xytdhr 发表于 2018-6-28 14:25
好的  那我改改直接修改原回复了哈
好的,很感谢。我刚才在jupyter中试了一下,实现了我想要的效果。不过我不大懂正则,我自己原本的设想是写两层for 循环。不管怎么想,实现了目标就好。
请帮我把这三个答案存成三个变量,我这里的明天上午为你加币。

9
yilaozhong 发表于 2018-6-28 14:48:13
前面那位是正则表达式高手,膜拜一下
我是用简单粗暴的循环法做的:
  1. datalist=['000000000000001101111111',
  2. '111111000000000010011111',
  3. '101111111111111111110000',
  4. '001111111001111111111111',
  5. '111111111111111111110011']
  6. # 纪录每一行连续出现的0的最大个数
  7. maxlist0 = []
  8. # 纪录每一行连续出现的1的最大个数
  9. maxlist1 = []
  10. # 纪录每一行0串个数
  11. countlist0 = []
  12. # 纪录每一行1串个数
  13. countlist1 = []

  14. for s in datalist:
  15.     i = 0
  16.     count1max = 0
  17.     count0max = 0
  18.     num1s = 0
  19.     num0s = 0
  20.     while i < len(s):
  21.         count1 = 0
  22.         while i < len(s) and s[i]=='1':
  23.             i += 1
  24.             count1 += 1
  25.         if count1 > count1max:
  26.             count1max = count1
  27.         if count1 > 0:
  28.             num1s += 1
  29.         count0 = 0
  30.         while i < len(s) and s[i]=='0':
  31.             i += 1
  32.             count0 += 1
  33.         if count0 > count0max:
  34.             count0max = count0
  35.         if count0 > 0:
  36.             num0s += 1
  37.         while i< len(s) and not s[i]=='1' and not s[i]=='0':
  38.             i += 1
  39.     maxlist0.append(count0max)
  40.     maxlist1.append(count1max)
  41.     countlist0.append(num0s)
  42.     countlist1.append(num1s)


  43. print("max number of consecutive 0s:", maxlist0)
  44. print("max number of consecutive 1s:" , maxlist1)
  45. print("number of occurrences of all-0 strings", countlist0)
  46. print("number of occurrences of all-1 strings", countlist1)
复制代码

附件: 你需要登录才可以下载或查看附件。没有帐号?我要注册
已有 1 人评分经验 论坛币 学术水平 热心指数 信用等级 收起 理由
yiyi23ttt + 60 + 60 + 1 + 1 + 1 热心帮助其他会员

总评分: 经验 + 60  论坛币 + 60  学术水平 + 1  热心指数 + 1  信用等级 + 1   查看全部评分

10
xytdhr 发表于 2018-6-28 14:56:36
翻滚吧锋哥 发表于 2018-6-28 14:29
好的,很感谢。我刚才在jupyter中试了一下,实现了我想要的效果。不过我不大懂正则,我自己原本的设想是写 ...
嘿嘿用正则应该是速度比较快的方法,主要看老哥数据量比较大。
正则其实就是匹配出来符合规则的部分字符串,也不复杂啦,由于正则的底层代码是二进制的匹配,所以它速度最快
那个我改好了。
除了变量,还把所有结果存在py文件同一文件夹下的txt文件里了。老哥要是不需要就删掉就好了

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

本版微信群
jg-xs1
拉您进交流群
GMT+8, 2025-12-21 03:25