2

こんにちは、すでに同様の質問がいくつかあったことは承知していますが、私が試みたことに対するより具体的な解決策を教えていただければ幸いです。

基本的に、プログラムはリスト内の最も短い単語を返す必要があります。最短の単語を空の文字列にすることはできません。<-- この部分のやり方もわかりません。

助けてくれてありがとう!: )

主なプログラム:

    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
4

4 に答える 4

6

build in min関数を使用するだけです:

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)ジェネレーター式

  • if word条件により、空の文字列が使用されないことが保証されます。

  • key=len 各単語の長さを使用して最小値を探します

于 2015-03-29T05:14:13.123 に答える
4

独自の関数を作成するよりも、常に組み込み関数を使用することをお勧めします (学習中の場合を除きます)。@Marcinは関数の働きを非常によく説明しているので、ジェネレーター式の代わりとして関数をmin紹介したいと思います。filter

minfilterがどのように連携するかを見てみましょう。

In [1]: l = ["ab", "abc", "", "fff", "gdfgfdg","a", "3455"]

In [2]: min(filter(None, l), key=len)
Out[2]: 'a'

ソリューションと比較すると直感的ではないかもしれませんが@Marcin、ジェネレーターの代わりに高次関数を使用することを好みます。1 つの単語の頻度が 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
于 2015-03-29T05:46:19.120 に答える
1

最初の最小単語が必要な場合。

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
于 2015-03-29T05:32:35.323 に答える