0

リスト内包表記でpython型をどのように使用しますか?? できますか?

>>> ll
[1, 2, 5, 'foo', 'baz', 'wert']

>>> [x for x in ll ]
[1, 2, 5, 'foo', 'baz', 'wert']

>>> [x for x in ll if type(x) == 'int']
[]

>>> [x*20.0 for x in ll if type(x) == 'int']
[]
>>> type(ll[0])
<type 'int'>

探している :[20, 40, 100, 'foo', 'baz', 'wert']

4

6 に答える 6

2

あなたは通常そうしません。isinstance()代わりに使用してください。

于 2013-07-02T02:05:38.890 に答える
2

それを試してください:

In [6]: [x * 20.0 if type(x) is int else x for x in ll]
Out[6]: [20.0, 40.0, 100.0, 'foo', 'baz', 'wert']

ここではtype(x) is int、 で型をチェックしています。そうであれば乗算します。それ以外の場合は、結果のリスト ( else x) に x を追加するだけです。

于 2013-07-02T08:22:53.443 に答える
1
>>> ll = [1, 2, 5, 'foo', 'baz', 'wert']
>>> [ x*20.0 if isinstance(x, int) else x for x in ll]
[20.0, 40.0, 100.0, 'foo', 'baz', 'wert']
于 2013-07-02T04:29:14.777 に答える
1

一般に、Python では、「ダック タイピング」を使用するのがベスト プラクティスです。これを行う 1 つの方法は、例外処理を使用することです。この場合、ヘルパー関数が必要になります。

def safe_multiply(x, y):
    try:
        return x * y
    except TypeError:
        return x

[safe_multiply(x, 20) for x in ll]

別のダックタイピングの答えは、オブジェクトに乗算のメソッドがあるかどうかを確認することです。

[x * 20 if hasattr(x, "__mul__") else x for x in ll]

しかし、上記の両方には癖があります: Python では*、文字列で使用することは合法であり、結果は文字列を繰り返します:

print("foo" * 3)  # prints "foofoofoo"

したがって、最善の方法は、Ignacio Vazquez-Abrams による回答を使用することです。彼は実際にあなたにコードを渡さなかったので、ここにあります:

[x * 20 if isinstance(x, int) else x for x in ll]
于 2013-07-02T02:57:07.427 に答える
0

== を使用しないでください。次のようなコードを記述する必要がある 'is' を使用してください。

[x for x in ll if type(x) is 'int']
于 2013-07-02T04:20:00.113 に答える