我必须创建一个函数,它接受一个参数字,并返回文本中单词之前的单词的平均长度(以字符为单位).如果单词恰好是文本中出现的第一个单词,则该单词的前一个单词的长度应为零.例如
>>> average_length("the")
4.4
>>> average_length('whale')
False
average_length('ship.')
3.0
Run Code Online (Sandbox Code Playgroud)
这是我到目前为止所写的,
def average_length(word):
text = "Call me Ishmael. Some years ago - never mind how long..........."
words = text.split()
wordCount = len(words)
Sum = 0
for word in words:
ch = len(word)
Sum = Sum + ch
avg = Sum/wordCount
return avg
Run Code Online (Sandbox Code Playgroud)
我知道这根本不对,但是我无法正确处理这个问题.这个问题要求我在文本中找到单词的每个实例,当你这样做时,计算文本中紧接在它之前的单词的长度.不是每个单词从开头到那个单词,只有一个.
我还应该提到所有的测试只会使用'Moby Dick'中的第一段来测试我的代码:
"叫我以实玛利.几年前 - 没关系多长时间 - 我的钱包里没有钱,也没有什么特别令我感兴趣的,我觉得我会稍微航行一下,看看这个世界的水域.这是我驱除脾脏和调节血液循环的一种方式.每当我发现自己的嘴巴变得严峻;每当我的灵魂中充满潮湿,毛躁的十一月;每当我发现自己在棺材仓库前不由自主地停顿,并带来在我遇到的每一次葬礼的后方;特别是每当我的hypos得到我这样的优势时,它需要一个强有力的道德原则来防止我故意踩到街上,并有条不紊地敲掉别人的帽子 - 然后,我说我是时候尽快出海了.这是我用手枪和球的替代品.随着哲学的蓬勃发展,卡托把自己扔在剑上;我悄悄地带上了船.这里没有什么令人惊讶的.知道了,等等 大多数所有男性,无论是时间还是其他人,都非常珍惜和我一样对待海洋的感情."
由于糟糕的语法和不明显的细节,一些正则表达式的执行时间呈指数级增长。有没有什么通用的方法可以分析和学习某个正则表达式是否具有线性或指数执行时间?
假设我有一个字符串变量
temp = 'I need to "leave" this place'
Run Code Online (Sandbox Code Playgroud)
我如何能够使用 temp.index() 来查找引号("") 的开始和结束位置?
我的代码执行以下操作:
n左侧的n单词和关键字右侧的单词.注意:在此上下文中,"单词"是任何非空格字符串."$ cow123"将是一个词,但"医疗保健"将是两个字.
这是我的问题:
代码需要很长时间才能在300页上运行,而且随着时间的推移,这个时间往往会迅速n增加.
这是我的代码:
fileHandle = open('test_pdf.txt', mode='r')
document = fileHandle.read()
def search(searchText, doc, n):
#Searches for text, and retrieves n words either side of the text, which are returned separately
surround = r"\s*(\S*)\s*"
groups = re.search(r'{}{}{}'.format(surround*n, searchText, surround*n), doc).groups()
return groups[:n],groups[n:]
Run Code Online (Sandbox Code Playgroud)
这是令人讨厌的罪魁祸首:
print search("\$27.5 million", document, 10)
Run Code Online (Sandbox Code Playgroud)
以下是测试此代码的方法: 从上面的代码块中复制函数定义并运行以下代码:
t = "The world is a small place, we $.205% try to take care of it."
print search("\$.205", …Run Code Online (Sandbox Code Playgroud) 给定一个模式[1,1,0,1,1]和一个长度为 100 的二进制列表,[0,1,1,0,0,...,0,1]. 我想计算此列表中此模式的出现次数。有没有一种简单的方法可以做到这一点,而无需使用变量跟踪每个索引处的每个项目?
请注意,[...,1, 1, 0, 1, 1, 1, 1, 0, 1, 1,...,0]可能会发生这样的事情,但这应该计为 2 次。
似乎Smalltalk实现错过了一个算法,该算法返回String中子字符串的所有索引.最相似的只返回一个元素的索引,例如:firstIndexesOf:in:,findSubstring:,findAnySubstring:variants.
Ruby中有实现,但第一个依赖于Ruby hack,第二个不能忽略重叠的字符串,最后一个使用Enumerator类,我不知道如何转换为Smalltalk.我想知道这个Python实现是否是最好的开始路径,因为考虑两种情况,重叠或不重叠,并且不使用正则表达式.
我的目标是找到一个提供以下行为的包或方法:
'ABDCDEFBDAC' indicesOf: 'BD'. "#(2 8)"
Run Code Online (Sandbox Code Playgroud)
考虑重叠时:
'nnnn' indicesOf: 'nn' overlapping: true. "#(0 2)"
Run Code Online (Sandbox Code Playgroud)
不考虑重叠时:
'nnnn' indicesOf 'nn' overlapping: false. "#(0 1 2)"
Run Code Online (Sandbox Code Playgroud)
在Pharo中,当在Playground中选择文本时,扫描程序会检测子字符串并突出显示匹配项.但是我找不到这个的String实现.
到目前为止,我的最大努力导致了String(Pharo 6)中的这种实现:
indicesOfSubstring: subString
| indices i |
indices := OrderedCollection new: self size.
i := 0.
[ (i := self findString: subString startingAt: i + 1) > 0 ] whileTrue: [
indices addLast: i ].
^ indices
Run Code Online (Sandbox Code Playgroud) 好的,所以我发现了这一点:在Python中查找所有出现的子字符串
其中说,为了使索引重叠列表中的子串的出现,您可以使用:
[m.start() for m in re.finditer('(?=SUBSTRING)', 'STRING')]
哪个有效,但我的问题是要查找的字符串和子字符串都是由变量定义的.我不太了解正则表达式知道如何处理它 - 我可以使用非重叠的子串,它只是:
[m.start() for m in re.finditer(p3, p1)]
谢谢.
编辑:
因为有人问,我会继续进行说明.P1和P3可以是任何字符串,但如果他们成功了,例如p3 = "tryt"和p1 = "trytryt",其结果应该是[0, 3].
我想在 Python 中获取列表中字符串的位置?我该怎么做?
比如用户提供一句话“你好,我叫Dolfinwu”,我事先把整个句子变成了一个列表,我想在这里得到每个“o”的位置,我该怎么做?在这种情况下,第一个“o”的位置是“4”,第二个“o”的位置是“18”。但是很明显,用户使用不同的词会输入不同的句子,那么在这种不可预测的情况下如何获得特定字符串值的位置?
我已经尝试过如下代码。我知道它包含语法错误,但我想不出更好的方法。
sentence = input('Please type a sentence: ')
space = ' '
for space in sentence:
if space in sentence:
space_position = sentence[space]
print(space_position)
Run Code Online (Sandbox Code Playgroud) 我试图在1个句子中找到包含"地狱"的所有单词.下面的字符串中有3次出现.但是re.search只返回前两次出现.我试过findall和搜索.有人可以告诉我这里有什么问题吗?
>>> s = 'heller pond hell hellyi'
>>> m = re.findall('(hell)\S*', s)
>>> m.group(0)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
AttributeError: 'list' object has no attribute 'group'
>>> m = re.search('(hell)\S*', s)
>>> m.group(0)
'heller'
>>> m.group(1)
'hell'
>>> m.group(2)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
IndexError: no such group
>>>
Run Code Online (Sandbox Code Playgroud) 我想使用JavaScript和匹配函数从字符串'ujj/jkiiiii/jk'获取所有字符串'/ jk'的索引.我能够找到所有字符串但是当我使用/时,它显示错误.
我试图在字符串中找到所有开括号的位置.根据这个答案,我能够找到字母的位置,但我找不到括号的位置.例如l = [3, 4],但当我试图找到所有(我得到error: unbalanced parenthesis.
import re
s = "(Hello("
l = [m.start() for m in re.finditer('l', s)]
openp = [m.start() for m in re.finditer('(', s)]
Run Code Online (Sandbox Code Playgroud) 例如在'GATTACA'中我想找到所有'A'.
我希望持仓1,4,6.
使用'.find'方法只能给出第一个'A'的位置,而不是其余的位置.
我想知道是否有另一种方法可以让你在字符串中找到所有'重复'字符?
这是我的代码:
sentence = input("Give me a sentence ")
word = input("What word would you like to find ")
sentence_split = sentence.split()
if word in sentence_split:
print("have found",word,)
print("The word comes in the position" )
else:
print("error have not found",word)
wordfound = (sentence_split.index(word)+1)
print(wordfound)
Run Code Online (Sandbox Code Playgroud)
我能够获得字符串中第一次出现的单词的索引.我怎样才能得到所有的事件?
python ×10
regex ×5
string ×4
indexing ×2
list ×2
performance ×2
python-3.x ×2
count ×1
javascript ×1
match ×1
pharo ×1
position ×1
python-2.7 ×1
quotes ×1
smalltalk ×1
substring ×1
visualworks ×1