大家知道我可能已经提出了一些类似的问题,但如果你能为我的尝试提供更具体的解决方案,我将不胜感激。
基本上程序应该返回列表中最短的单词。最短的单词不能是空字符串。 < - 我也不知道如何做这部分。
感谢您的帮助! :)
主程序:
n = int((input("Enter amount of words: "))
sw = st.word(n)
print("The shortest word is: {0:.s}" .format(sw))
功能:
def word(n):
l1 = []
for i in range(n):
words = str(input("Enter word: "))
l1.append(words)
s = l1
nxt = l1
for i in range(n+1):
if s[i] < nxt[i+1]:
smallest = s[i]
if nxt[i+1] < s[i]:
smallest = nxt[i+1]
return smallest
答案 0 :(得分:5)
你可以在min函数中使用build:
l = ["ab", "abc", "", "fff", "gdfgfdg","a", "3455"]
print(min((word for word in l if word), key=len))
# results in: a
一些解释:
(word for word in l if word)
是generator expression,
if word
条件确保不使用空字符串,
key=len
使用每个单词的长度来寻找minium
答案 1 :(得分:3)
你应该总是喜欢使用内置函数而不是自己编写(可能除了你学习的情况)。 @Marcin
非常好地描述了min
函数的工作,因此,我想向您展示filter
函数作为生成器表达式的替代。
让我们看看min
和filter
如何协同工作的方式:
In [1]: l = ["ab", "abc", "", "fff", "gdfgfdg","a", "3455"]
In [2]: min(filter(None, l), key=len)
Out[2]: 'a'
与@Marcin
解决方案相比,它可能不太直观,但我更喜欢使用高阶函数而不是生成器。阅读文字,其中一个单词的频率为40%(word for word in l if word
- 3/7) - 不,谢谢:)。
只是引用文档:
In [3]: filter?
Type: type
String form: <class 'filter'>
Namespace: Python builtin
Docstring:
filter(function or None, iterable) --> filter object
Return an iterator yielding those items of iterable for which function(item)
is true. If function is None, return the items that are true
答案 2 :(得分:0)
如果你想要第一个最小单词。
n = raw_input('Enter words breaking with spaces:')
wordList = n.split()
print min([(word, len(word)) for word in wordList], key=lambda x:x[1])
如果你想要所有最小的单词。
n = raw_input('Enter words breaking with spaces:')
wordList = n.split()
minimunWordLength = min([len(word) for word in wordList])
minimunWords = filter(lambda x:len(x) == minimunWordLength,wordList)
print minimunWords
答案 3 :(得分:0)
<强> ALGO:强>
raw_input()
获取数字字词的用户输入。当用户输入错误的输入时处理异常处理,即非整数值。 You enter value less then 1.
getSmallWord
函数,将单词计数器作为参数传递。for
循环和range
函数接受来自用户的单词并添加到set
变量,因为单词可能与用户重复,set不会添加重复的单词。set
中的第一个元素指定为最小元素,并从set
中删除此单词。set
中的每个元素并检查当前元素,即字长是否小于最小字,然后将该字指定为最小字。<强>演示:强>
def getSmallWord(n):
#- Use set because set will add one one word when user enter duplicate words.
words = set()
for i in range(n):
word = raw_input("Enter word: ")
words.add(word)
#- Assign First word as smallest.
smallest_word = words.pop()
#- Iterate words from the 1 index. because we assign 0th element as Smallest.
for word in words:
#- Check Lenght of current elemnt from the User Input with the Smallest Word.
if len(word)<len(smallest_word):
smallest_word = word
return smallest_word
if __name__=="__main__":
try:
n = int(raw_input("Enter amount of words: "))
except ValueError:
n = 5
print "Enter Wrong number input. Number of Words are %d"%n
if n>0:
sw = getSmallWord(n)
print "The shortest word is: %s" %sw
else:
print "You enter value less then 1."
<强>输出:强>
vivek@vivek:~/Desktop/stackoverflow/anna$ python 8.py
Enter amount of words: 5
Enter word: qwert
Enter word: asdf
Enter word: as
Enter word: asdf
Enter word: qwer
The shortest word is: as
注意:强>
对Python 2.x使用raw_input()
对Python 3.x使用input()