Взятие списка и печать всех индексов элементов, которые не равны 0 - PullRequest
1 голос
/ 02 октября 2019

Мне нужно взять список, такой как [2,2,0,2], и затем мне нужно вернуть новый список индексов для элементов в списке, которые не равны 0, поэтому для списка [2,2,0,2] Мне нужно было бы вернуть [0,1,3]. Или для [1,0,1,1] мне нужно будет вернуть [0,2,3].

def test(B):
    for k in list(B):
        if k > 0:
            result = []
            for i in range(len(B)):
                result.append(i)
        return result
test([2,2,0,2])
->[0,1,2,3]

Моя проблема в том, что все индексы возвращаются, и я пыталсячтобы исправить это, но не повезло. Если кто-нибудь может помочь, это здорово, спасибо.

Ответы [ 4 ]

2 голосов
/ 02 октября 2019

Вы можете использовать enumerate для достижения этого аккуратно:

def legal(B):
    return [i for i, x in enumerate(B) if x]
    # or if you want to cover more than numbers
    # return [i for i, x in enumerate(B) if x != 0]

>>> legal([2,2,0,2])
[0, 1, 3]
>>> legal([1,0,1,1])
[0, 2, 3]
1 голос
/ 02 октября 2019

Вы можете попробовать это:

def legal(B):
    result = []
    for i, k in enumerate(list(B)):
        if k > 0:
            result.append(i)
        return result

Почему вы делаете list(B)? Если B не список, это должно работать. Если это так, вы должны удалить функцию list.

1 голос
/ 02 октября 2019

Вы можете использовать понимание списка, как показано ниже

ls = [2,2,0,2]

ind = [i for i, val in enumerate(ls) if val!=0]

print(ind)
1 голос
/ 02 октября 2019

это должно сделать работу:


def indices(some_list):
    indices_list = []
    for i in range(0, len(some_list)):
        if some_list[i] != 0:
            indices_list.append(i)
    return indices_list

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...