0

単一の int またはリストのいずれかを返すコードがあります。int を返す場合は、int のみを含むリストに変換する必要があります。

次のことを試しましたが、うまくいきません。

newValue = list(retValue)

list(some int)int はイテラブルではないため、どうやらできないようです。これを行う別の方法はありますか?

前もって感謝します!

4

6 に答える 6

9

独自の関数を定義します。

 def mylist(x):
    if isinstance(x,(list,tuple)):
        return x
    else:
        return [x]


>>> mylist(5)
[5]
>>> mylist([10])
[10]
于 2012-07-10T21:43:21.360 に答える
7

Python では、ダック タイピングが推奨されます。特定のタイプをテストするのではなく、必要なメソッドをサポートしているかどうかをテストします (「カモが鳴る限り、ダックかどうかは気にしません」)。

def make_list(n):
    if hasattr(n, '__iter__'):
        return n
    else:
        return [n]

a = make_list([1,2,3])    # => [1,2,3]
b = make_list(4)          # => [4]
于 2012-07-10T21:56:03.390 に答える
2
listInt = intVal if isinstance(intVal,list) else [intVal]

値がリストでない場合、これは常にリストを返します。お役に立てれば

于 2012-07-10T22:02:48.873 に答える
2

これは実際にはHugh Bothwellの答えのバリエーションにすぎませんが、最先端のダック タイピングが必要な場合はhasattr(rval, '__iter__')、より魅力的なパッケージでのセマンティクスを取得できますisinstance(rval, collections.Iterable)。そう...

def wrap_in_iterable(x):
    if isinstance(x, collections.Iterable):
        return x
    else:
        return [x]

また、iterable だけでなく、 listが必要な場合もあります。リストのようなものを取得するが、ジェネレータのようなものや辞書のようなものを排除するのcollections.Sequenceは便利です。(この関数に無限ジェネレーターを渡さないでください。)

def convert_to_sequence(x):
    if isinstance(x, collections.Sequence):
        return x
    elif isinstance(x, collections.Iterable):
        return list(x)
    else
        return [x]

これらが機能するのは、適切なチェックを実行するcollections.Sequenceおよび をcollection.Iterable定義するためです。__subclasshook__hasattr

最後に、退屈になるリスクがあります。返される関数を制御できる場合は、可能であれば 1 つの項目のリストを返します。

于 2012-07-11T01:48:48.030 に答える
2
if isinstance(x,list): return x
else: return [x]

それでおしまい。

もちろん、これは他の iterable 型を賢く扱うわけではありませんが、すべての iterable をリストであるかのように扱いたいかどうかは明確ではありません (そうするかもしれませんし、しないかもしれません)。

于 2012-07-10T21:49:13.243 に答える
2

変数を int に変換してみてください。すでに int である場合、これはノーオペレーションです。リストの場合、これは TypeError を発生させます。

try:
    return [int(x)]
except TypeError:
    return x

ただし、例外的な状況が発生する可能性が高い場合、フロー制御に例外を使用することは一般的に嫌われます。これは、例外の処理が非常に時間のかかる作業であるためです。

もう 1 つの方法は、isinstance演算子を使用することです。

if isinstance(x, list):
    return x
else:
    return [x]
于 2012-07-10T21:59:47.730 に答える