我有一个文本文件,其中包含一行。文本行是一大堆随机数。我需要确定重复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
答案 0 :(得分: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;
希望,这有助于:)