在字符串中查找重复的字符,并确定在python中重复连续的次数

时间:2012-07-11 17:45:04

标签: python python-2.7

我有一个文本文件,其中包含一行。文本行是一大堆随机数。我需要确定重复5次的最多次并打印重复的次数。例如:numList:1234555325146555。连续重复5次的次数为3次,发生次数为2次。这是我到目前为止的代码,它向我展示了5发生的位置。我认为这是第一步,但无法弄清楚如何继续前进。

numbers = open("numbers.txt",'rU')
count = -1
numString = numbers.readline()
for num in numString:
    count += 1
    if num == '5':
        print count
        counter += 1

6 个答案:

答案 0 :(得分:4)

你有正确的想法找出5在哪个位置。

那你怎么知道5排的排了多长时间?想一想:

  1. 你需要知道你是否找到了5,如果它是系列的一部分。跟踪以前的号码。如果这也是5,那么你将继续一系列。
  2. 如果你继续播放一个系列节目,那就有另一个计数器来跟踪它的持续时间。
  3. 如果您的号码不是5,则需要重置计数器。但在重置之前,您需要存储该值。
  4. 对于问题的下一部分(找出有多少系列的5个),尝试使用额外的“元”变量来跟踪你到目前为止最长的系列以及你看过多少次。
  5. 祝你好运!并继续提问

答案 1 :(得分:3)

我经常发现这样的任务,我问自己,如果问题很大,我怎么会在没有电脑的情况下做到这一点,我记不起一切。所以在这里,我会去,直到我找到一个5.然后我会看下一个数字,如果它是5,继续前进,直到连续不再有5个。所以在你的例子中,我会连续找到3个5。我会记下,我找到的最长时间是3 5。然后我会继续下一个5。

然后我会再计算连续多少5个。在这种情况下,我会看到只有1.所以我不打算做任何事情因为我会看到它小于3.然后我会继续下一个5。

我会看到连续3个,我会回到我的论文,看看我发现的最长时间是多久,我会看到它是3.那么我会记下那个我已经看到连续3套2套。

如果我发现4个或更多,我会忘记关于3组的所有信息,并以4组或其他任何方式重新开始。

所以尝试在你的循环中实现这种想法。

答案 2 :(得分:2)

这是一个相当简单的方法来解决这个问题:

>>> import re
>>> numString = '1234555325146555'
>>> fives = re.findall(r'5+', numString)
>>> len(max(fives))          # most repetitions
3
>>> fives.count(max(fives))  # number of times most repetitions occurs
2

答案 3 :(得分:1)

我会不断检查特定的5字符串是否在给定的字符串中,直到它不再存在(每次添加'5')。然后我将备份1并使用count字符串方法 -​​ 类似这样的事情(伪代码如下 - 注意这不是语法上有效的python。这取决于你,因为这是作业。)

str5='5'
while str5 in your_string
    concatenate '5' with str5

#your string is too long by 1 element
max_string=str5 minus the last '5'
yourstring.count(max_string)

答案 4 :(得分:0)

from collections import defaultdict, Counter
from itertools import groupby

num_str = '112233445556784756222346587'

res = defaultdict(Counter)
for dig,seq in groupby(num_str):
    res[dig][len(list(seq))] += 1

print res['5'].most_common()

返回

[(1, 2), (3, 1)]

(意思是'5'被看到两次,'555'被看到一次)

答案 5 :(得分:0)

#  First step: Find at most how many times 5 comes in a row.
# For this I have a counter which increases by 1 as long 
# as I am dealing with '5'. Once I find a character other 
# than '5' I stop counting, see if my counter value is greater
# than what I have found so far and start counting from zero again.

numbers = open("numbers.txt",'rU')
count = -1
numString = numbers.readline()
maximum = -1;

for num in numString:
    count +=1
    if num== '5':
        counter += 1
    else:
        maximum=max(maximum, counter)
        counter = 0;

#  Second step: Find how many times this repeats.
# Once I know how much times it comes in a row, I find consequent fives
# with the same method and see if the length of them is equal to my maximum

count=-1
amount = 0
for num in numString:
    count +=1
    if num== '5':
        counter += 1
    else:
        if maximum == counter:
            amount += 1
        counter = 0;

希望,这有助于:)