我正在准备考试,但我遇到了一个过去的纸质问题。给定一个包含句子的字符串,我想找到该句子中最长的单词并返回该单词及其长度。 编辑:我只需要返回长度,但感谢您对原始问题的回答!它可以帮助我了解更多。谢谢。
例如:string =“你好我喜欢cookies”。然后我的程序应该返回“Cookies”并且长度为7。
现在的问题是,我不允许使用String类中的任何函数来获得满分,而对于满分,我只能通过字符串一次。我不允许使用string.split()(否则不会有任何问题),解决方案不应该有太多的for和while语句。字符串只包含字母和空格,单词用一个空格分隔。
有什么建议吗?我输了,我没有任何代码。
感谢。
编辑:对不起,我误读了考试题目。你只需要返回它看起来最长的单词的长度,而不是长度+单词。
EDIT2 :好的,在你的帮助下,我想我正在做点什么......
def longestword(x):
alist = []
length = 0
for letter in x:
if letter != " ":
length += 1
else:
alist.append(length)
length = 0
return alist
但它返回[5,1,4]为“你好我喜欢饼干”所以它错过了“cookies”。为什么?编辑:好的,我明白了。这是因为句子中的最后一个字母后面没有“”,因此它不会追加长度。我修复它所以它现在返回[5,1,4,7]然后我只取最大值。
我想使用列表但不是.split()可以吗?它只是说“字符串”中的函数是不允许的,或列出字符串的一部分?
答案 0 :(得分:3)
您可以尝试使用正则表达式:
import re
string = "Hello I like cookies"
word_pattern = "\w+"
regex = re.compile(word_pattern)
words_found = regex.findall(string)
if words_found:
longest_word = max(words_found, key=lambda word: len(word))
print(longest_word)
答案 1 :(得分:2)
一次通过寻找最大值很容易:
current_max = 0
for v in values:
if v>current_max:
current_max = v
但在你的情况下,你需要找到这些词。记住这句话(属于J. Zawinski):
有些人在面对问题时会想到,我知道,我会使用正则表达式。"现在他们有两个问题。
除了使用正则表达式之外,您还可以检查单词是否包含字母。第一种方法是遍历列表并检测单词的开头或结尾:
current_word = ''
current_longest = ''
for c in mystring:
if c in string.ascii_letters:
current_word += c
else:
if len(current_word)>len(current_longest):
current_longest = current_word
current_word = ''
else:
if len(current_word)>len(current_longest):
current_longest = current_word
最后一种方法是在生成器中拆分单词并找到它产生的最大值(这里我使用了max
函数):
def split_words(mystring):
current = []
for c in mystring:
if c in string.ascii_letters:
current.append(c)
else:
if current:
yield ''.join(current)
max(split_words(mystring), key=len)
答案 2 :(得分:1)
只搜索非空白字符组,然后按长度查找最大值:
longest = len(max(re.findall(r'\S+',string), key = len))
答案 3 :(得分:1)
这很简单:
def long_word(s):
n = max(s.split())
return(n)
IN [48]: long_word('a bb ccc dddd')
Out [48]: 'dddd'
答案 4 :(得分:1)
对于python 3.如果句子中的两个词的长度相同,那么它将返回首先出现的单词。
def findMaximum(word):
li=word.split()
li=list(li)
op=[]
for i in li:
op.append(len(i))
l=op.index(max(op))
print (li[l])
findMaximum(input("Enter your word:"))
答案 5 :(得分:0)
我可以看到想象一些不同的选择。 Regular expressions可能会做很多你需要做的分裂。如果您了解正则表达式,这可能是一个简单的选项。
另一种方法是将字符串视为列表,迭代它以跟踪索引,并查看每个字符以查看是否结束了单词。然后你只需要保留最长的单词(最长的索引差异),你应该找到答案。
答案 6 :(得分:0)
正则表达式似乎是您最好的选择。首先使用re
来分割句子:
>>> import re
>>> string = "Hello I like cookies"
>>> string = re.findall(r'\S+',string)
\S+
查找所有非空白字符并将它们放在列表中:
>>> string
['Hello', 'I', 'like', 'cookies']
现在你可以找到包含最长单词的list元素的长度,然后使用list comprehension来检索元素本身:
>>> maxlen = max(len(word) for word in string)
>>> maxlen
7
>>> [word for word in string if len(word) == maxlen]
['cookies']
答案 7 :(得分:0)
此方法仅使用一个for
循环,不使用String
类中的任何方法,仅严格访问每个字符一次。您可能需要根据字数作为单词的一部分进行修改。
s = "Hello I like cookies"
word = ''
maxLen = 0
maxWord = ''
for c in s+' ':
if c == ' ':
if len(word) > maxLen:
maxWord = word
word = ''
else:
word += c
print "Longest word:", maxWord
print "Length:", len(maxWord)
答案 8 :(得分:0)
鉴于你不允许使用string.split()
我想使用正则表达式做同样的事情也应该被排除。
我不想为你解决你的运动,但这里有一些指示:
答案 9 :(得分:0)
import re
def longer_word(sentence):
word_list = re.findall("\w+", sentence)
word_list.sort(cmp=lambda a,b: cmp(len(b),len(a)))
longer_word = word_list[0]
print "The longer word is '"+longer_word+"' with a size of", len(longer_word), "characters."
longer_word("Hello I like cookies")
答案 10 :(得分:0)
import re
def longest_word(sen):
res = re.findall(r"\w+",sen)
n = max(res,key = lambda x : len(x))
return n
print(longest_word("Hey!! there, How is it going????"))
输出:有
在这里,我已使用regex
解决该问题。变量“ res” 查找字符串中的所有单词,并将它们拆分后本身存储在列表中。
它使用split()
将所有字符存储在列表中,然后regex
完成工作。
findall
关键字用于在字符串中查找所有所需的实例。这里定义了\w+
,它告诉编译器查找所有单词,且不带空格。
变量“ n” 从给定的字符串中找到最长的单词,该单词现在不再包含任何不需要的字符。
变量“ n” 使用lambda expressions
在此处定义键len()
。
变量“ n” 从“ res”中找到最长的单词,该单词已删除所有非字符串字符,如%,&,!!等
>>>#import regular expressions for the problem.**
>>>import re
>>>#initialize a sentence
>>>sen = "fun&!! time zone"
>>>res = re.findall(r"\w+",sen)
>>>#res variable finds all the words and then stores them in a list.
>>>res
Out: ['fun','time','zone']
>>>n = max(res)
Out: zone
>>>#Here we get "zone" instead of "time" because here the compiler
>>>#sees "zone" with the higher value than "time".
>>>#The max() function returns the item with the highest value, or the item with the highest value in an iterable.
>>>n = max(res,key = lambda x:len(x))
>>>n
Out: time
在这里我们得到“时间” ,因为lambda表达式会丢弃“区域” ,因为它看到键是len()
中的max()
函数
答案 11 :(得分:0)
在先前提供的解决方案中发现错误,他是纠正措施:
def longestWord(text):
current_word = ''
current_longest = ''
for c in text:
if c in string.ascii_letters:
current_word += c
else:
if len(current_word)>len(current_longest):
current_longest = current_word
current_word = ''
if len(current_word)>len(current_longest):
current_longest = current_word
return current_longest
答案 12 :(得分:-1)
add_filter('woocommerce_get_catalog_ordering_args', 'am_woocommerce_catalog_orderby');
function am_woocommerce_catalog_orderby( $args ) {
$args['meta_key'] = '_sku';
$args['orderby'] = 'meta_value_num';
$args['order'] = 'desc';
return $args;
}
输出-独立