3

次の両方の基準がすべて満たされている単語のリストを作成して印刷します。

  • 単語の長さは少なくとも8文字です。
  • 奇数の文字から形成された単語は、小文字の単語のセットに含まれています。と
  • 偶数の文字から形成された単語は、小文字の単語のセットに含まれています。

たとえば、奇数の文字「blond」から形成された単語と偶数の文字「aloe」から形成された単語の両方が次のセットに含まれているため、「ballooned」という単語をリストに含める必要があります。小文字の単語。同様に、「3年ごと」は「小さな」と「腎臓」に分かれます。どちらも単語リストに含まれています。

私の先生は私たちにセットを使うべきだと言いました:s=set(lowers)これはもっと速いからです。

私がこれまでに持っているもの:

s=set(lowers)
[word for word in lowers if len(word)>=8
                        and list(word)(::2) in s
                        and list(word)(::-2) in s]

セットを正しく使っているとは思いません。誰かが私がこれを機能させるのを手伝ってくれる?

4

4 に答える 4

2

問題は、リストにキャストwordする (不要)、スライスが角かっこで囲まれていない (かっこを使用した)、および 2 番目のスライスが間違ったインデックスを使用していることです (1::2ではなく::-2)。

正しく行われたスライスは次のとおりです。

>>> word = "ballooned"
>>> word[::2]
'blond'
>>> word[1::2]
'aloe'

s小文字の単語のコレクションの奇妙な名前であることに注意してください。より適切な名前はwords.

の使い方setは正しいです。教師がセットを使用するように求めている理由は、リストよりもセットのメンバーシップをテストする方がはるかに高速だからです。

それを一緒に入れて:

words = set(lowers)
[word for word in words if len(word) >= 8
                        and word[::2] in words
                        and word[1::2] in words]
于 2012-11-12T18:08:47.013 に答える
1

リスト内包表記内で条件チェックを構造化する方法の簡単な例を次に示します。

>>> word = 'ballooned'
>>> lowers = ['blond', 'aloe']
>>> s = set(lowers)
>>> len(word) >= 8 and word[::2] in s and word[1::2] in s
True

編集:有効な単語と「ballooned」や「triennially」などの「検索」単語の両方が含まれていることに気付きlowersました。いずれにせよ、リスト内包表記内で上記の条件を使用して正しい結果を得ることができるはずです。

于 2012-11-12T18:09:11.117 に答える
1
list(word)(::2)

wordまず、インデックス範囲にアクセスするための構文は角括弧を使用しています。また、最初にリストにキャストする必要はありません。文字列に対して直接キャストできます。

>>> 'ballooned'[::2]
'blond'

また、[::-2]不均一な言葉ではなく、他の言葉の逆バージョンを提供します。使用する必要があります[1::2](つまり、最初の文字をスキップし、次にすべての文字をスキップします):

>>> 'ballooned'[::-2]
'dnolb'
>>> 'ballooned'[1::2]
'aloe'

一般に、特定の部分を個別にテストして、それらが実際に機能するかどうかを確認することをお勧めします。

于 2012-11-12T18:10:54.797 に答える
0

これはそれを行う必要があります:

s=set(lowers)
[word for word in lowers if len(word)>=8 and word[::2] in s and word[1::2] in s]

または使用all()

In [166]: [word for word in lowers if all((len(word)>=8,
                                               word[::2] in s,
                                               word[1::2] in s))]

[::]notを使用し、ここで(::)の必要はありませんlist()。さらに、奇妙な位置に配置された文字で形成された単語を取得するには、 を使用します[1::2]

In [151]: "ballooned"[::2]
Out[151]: 'blond'

In [152]: "ballooned"[1::2]
Out[152]: 'aloe'
于 2012-11-12T18:09:09.133 に答える