Więc mam listę 5 lub mniej elementów, a elementy są po prostu liczbami całkowitymi od 0 do 9, a elementy są przypisane losowo i lista może mieć 5 zer lub 5 jedynek itp., i mam następującą funkcję, aby sprawdzić, czy na liście jest zero. zwróci to indeks pierwszego znalezionego zera. po prostu zignoruj .getValue ()

    def check0(self):
        '''
        check for the index of the first card with value 0 in hand
        :return:
        '''
        index = 0
        found = False
        while not found and index<len(self.hand):
            if self.hand[index].getValue() == 0:
                found = True
            index += 1
        if not found:
            index = -1
        return index

Ale problem polega na tym, że zawsze zwraca pierwsze zero, które znajdzie na liście. w innej klasie używam tej funkcji, aby sprawdzić, czy ręka ma jakieś zera.

Muszę napisać pętlę for lub inną pętlę, która przejdzie przez rękę listy i powie mi, czy wszystkie elementy w dłoni są zerami.

Więc jedynym rozwiązaniem, jakie przychodzi mi do głowy w przypadku tego problemu, jest jednokrotne przejście przez listę, a gdy zostanie znalezione pierwsze zero, zwiększ wartość licznika, a następnie ponownie przejrzyj listę, tym razem z wyłączeniem zera, które zostało już znalezione.

Na przykład:

I have the list
[0,0,0,0,0]

in the first traversal, the check0() method will return the index 0 for the first zero but then I traverse the list again this time excluding the first zero and repeating that until I reach the last element.

Myślałem coś takiego:

def find_zeros():
counter = 0
     for I in some_list(0,len(some_list),-1):
          if I.check0() != -1:
              counter += 1
          if counter == len(some_list):
             return True
     return False

Czy ktoś może mi pomóc z tym problemem? daj mi znać, jeśli coś jest niejasne. Nie wolno mi też niczego importować, a złożoność czasowa nie stanowi problemu

0
unclephil123 2 kwiecień 2020, 15:39

4 odpowiedzi

Najlepsza odpowiedź

„Muszę napisać pętlę for lub inną pętlę, która przejdzie przez rękę z listą i powie mi, czy wszystkie elementy w dłoni są zerami”. (OP)

Cóż, aby sprawdzić, czy wszystkie elementy na liście są zerowe, możesz użyć count:

lst1 = [0,0,0,0,0]
print(len(lst1) == lst1.count(0))

A może rozumienie ze zrozumieniem:

lst1 = [0,0,0,0,0]
print(lst1 == [nr for nr in lst1 if nr == 0])

Prawdopodobnie lepiej napisane przy użyciu all, takich jak:

lst1 = [0,0,0,0,0]
print(all(i==0 for i in lst1))

A może utwórz drugą listę tego samego rozmiaru:

lst1 = [0,0,0,0,0]
print(lst1 == [0]*len(lst1))
2
JvdV 2 kwiecień 2020, 13:26

Możesz użyć enumerate dla tego typu problemu.

for index, ch in enumerate(list_name):
   print(i, ch)

To da ci indeks każdego znaku na liście. Możesz później użyć instrukcji „if”, aby sprawdzić, czy „ch” jest zerem. Mam nadzieję, że to pomogło.

0
Esh200111 2 kwiecień 2020, 12:45
listt=[1,0,2,0,1]

for i in range(len(listt)):
    if listt[i]==0:
        print(i)
        break #if you want to find first occurence

Aby sprawdzić, czy wszystkie elementy mają wartość 0,

  if len(set(listt))==1 and listt[0]==0:   
           print("All index have 0 ")
0
AyyAppAn Ajith 2 kwiecień 2020, 12:55

Możesz zdefiniować tę funkcję w ten sposób:

def check0(self):
    index = (self.hand+[0]).index(0)
    return -1 if not any(self.hand) else index
0
Alain T. 2 kwiecień 2020, 18:16