1

2 つのリストがあるとします。

A = [2, 3, [6, 7], 0]
B = [4, 7, 10, 2]

これらの値を次のような関数に入力したい:

def gettype(self, a):
 for x in a:
    if isinstance(x, list):
     ident = True
    else:
     ident = False
  return ident 

リストのリストがある場合は True を返し、それ以外の場合は false を返します。

ident = gettype(A)
print ident
True

ident = gettype(B)
print ident
False

PS: 上記の関数は機能しません。どちらの場合も False を返します。

4

4 に答える 4

10

お気に入り

A = [2, 3, [6, 7], 0]
B = [4, 7, 10, 2]


def has_lists(lst):
    return any(isinstance(x, list) for x in lst)

print has_lists(A) # True
print has_lists(B) # False
于 2012-06-03T17:44:23.723 に答える
4

問題はident、リストのすべてのメンバーの値を変更することです。したがって、実際には、リストの最後の要素がリストである場合にのみ True を取得します。

代わりにこれを試してください。リストにリストがある場合、True を返します。リストに遭遇せずにリストの最後に到達した場合は、False を返します。

def gettype(self, a):
 for x in a:
    if isinstance(x, list):
     return True
  return False
于 2012-06-03T17:41:59.080 に答える
1

リストのすべての要素を繰り返し処理しています。ident問題は、リストの最後の値がinteger関数の戻り値であるため、 andの値を上書きしていることですFalse

他の回答の他の実装と同様に、要素Trueの最初のケースを見つけたら戻る必要があります。list

于 2012-06-03T17:43:36.110 に答える
1

コードの問題は、ident反復ごとに更新することであり、最後の値はAリストではないため、False結果になります。あなたが望む可能性が高いものは次のとおりです。

def gettype(self, a):
    for x in a:
        if isinstance(x, list):
            return True
    return False

リスト要素が検出されるとすぐに、ステートメントがループreturn Trueから抜け出し、アルゴリズムを終了することに注意してください。for

于 2012-06-03T17:47:34.060 に答える