我正在做一个python练习问题,我必须区分模式。例如,一个模式是我必须计算被几个x包围的“oo”。
line = "xooxxxxooxxxxoxoxxxxoxoxxxxxxxoxoxxoooxxxxxxxxxxxx"
被x包围的“oo”只是其他几种模式中的一种。我尝试使用for循环,但令人尴尬的是没有工作。有没有办法我可以通过字符串来获取某些模式以添加到计数变量?如果我学会了如何为这个做,我相信我可以找到这种做法的其他模式。 :) 谢谢!
我试过
for "oo" in line:
count += 1
但它不起作用。对于循环真的很糟糕,对不起。 预期输出是此模式的计数:2 o被x的
包围答案 0 :(得分:1)
首先,你有一个文字("oo"
),你需要一个变量才能让你的循环工作:
for "oo" in line:
# ^literal not allowed here
为了使用循环执行类似的操作,您可能希望遍历 indices ,检查字符串的一部分并查看它是否与特定子字符串匹配:
count = 0
for i in range(len(line)):
if line[i:i+4] == 'xoox':
count += 1
请注意,这样做绝对不是“pythonic”。一个pythonic解决方案将是:
line.count('xoox') # Batteries included :-)
答案 1 :(得分:0)
您的代码应该像SyntaxError
一样提供can't assign to literal
。你期望循环遍历字符串中的所有'oo's
,但是这不是发生的事情,或者应该发生什么。
你可能想到的是循环遍历字符串并查看有多少'oo',在这种情况下无法完成。
有一个很棒的内置函数叫count()
,它有...计数。你如何使用它是:
yourstring.count(str) # str here is what you want to count,
# yourstring is where you are counting
它返回一个整数,所以这是你想要的代码:
>>> line = "xooxxxxooxxxxoxoxxxxoxoxxxxxxxoxoxxoooxxxxxxxxxxxx"
>>> line.count('oo')
3
答案 2 :(得分:0)
如果没有给出答案,split
函数可能会对您有用...... http://docs.python.org/2/howto/regex.html#splitting-strings
test = "xxxxooxxxxoooxxxx"
test.split("oo")
该代码返回['xxxx', 'xxxx', 'oxxxx']
希望有所帮助。换句话说,如果你有以'x'结尾的连续字符串,而另一个字符串以'x'开头,你就会计算出事件。
答案 3 :(得分:0)
三种解决方案,以满足您的需求:
我尝试使用for循环,但令人尴尬的是没有工作。是 有一种方法,我可以通过一个字符串来获取某些模式 添加到计数变量?如果我学会了如何为这个做,我就是 我确定可以找到这种做法的其他模式。
line = "Bxooxxx xoox xxoxoxxxoxoxxxox#xoooxxoox"
print line,'\n'
def explore(X):
it = iter(X)
prec = it.next()
print 'prec ch1 next next'
for ch in it:
print ' %r %r' % (prec,ch),
if (prec,ch)==('x','o'):
prec = it.next()
print ' %r' % prec,
if prec=='o':
prec = it.next()
if prec =='x':
print ' %r OK !!' % prec
yield 1
else:
print ' %r not good' % prec
else:
print ' stop'
else:
print
prec = ch
print sum(explore(line))
结果
Bxooxxx xoox xxoxoxxxoxoxxxox#xoooxxoox
prec ch1 next next
'B' 'x'
'x' 'o' 'o' 'x' OK !!
'x' 'x'
'x' 'x'
'x' ' '
' ' 'x'
'x' 'o' 'o' 'x' OK !!
'x' ' '
' ' ' '
' ' 'x'
'x' 'x'
'x' 'o' 'x' stop
'x' 'o' 'x' stop
'x' 'x'
'x' 'x'
'x' 'o' 'x' stop
'x' 'o' 'x' stop
'x' 'x'
'x' 'x'
'x' 'o' 'x' stop
'x' '#'
'#' 'x'
'x' 'o' 'o' 'o' not good
'o' 'x'
'x' 'x'
'x' 'o' 'o' 'x' OK !!
3
line = "Bxooxxx xoox xxoxoxxxoxoxxxox#xoooxxoox"
print line,'\n'
def expl(X):
it4 = iter(X)
it4.next();it4.next();it4.next()
it3 = iter(X)
it3.next();it3.next()
it2 = iter(X)
it2.next()
it1 = iter(X)
for a in it4:
if (it1.next(),it2.next(),it3.next(),a)==('x','o','o','x'):
yield 1
print sum(expl(line))
结果
Bxooxxx xoox xxoxoxxxoxoxxxox#xoooxxoox
3
line = "Bxooxxx xoox xxoxoxxxoxoxxxox#xoooxxoox"
print line,'\n'
import re
reg = re.compile('(?<=x)oox')
print len(reg.findall(line))
结果
Bxooxxx xoox xxoxoxxxoxoxxxox#xoooxxoox
3
因此,请考虑迭代器和生成器