• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Python for loop

Object Storage Arubacloud
+2 głosów
119 wizyt
pytanie zadane 5 lutego 2023 w Python przez Steady Obywatel (1,140 p.)

Przychodzę  dzisiaj z kolejnym pytaniem bo nie mogę  w internecie znaleźć odpowiedzi.

Kolejne zadanie jak mam to wydrukowanie z listy tylko te indexy ktore posiadają numery w swoich nazwach:

indexes = [
    "WIG",
    "WIG-banki",
    "WIG-budownictwo",
    "WIG-CEE",
    "WIG-chemia",
    "WIG-energia",
    "WIG-ESG",
    "WIG-górnictwo",
    "WIG-informatyka",
    "WIG-leki",
    "WIG-media",
    "WIG-motoryzacja",
    "WIG-nieruchomości",
    "WIG-odzież",
    "WIG-paliwa",
    "WIG-Poland",
    "WIG-spożywczy",
    "WIG-telekomunikacja",
    "WIG-Ukraine",
    "WIG.GAMES",
    "WIG.MS-BAS",
    "WIG.MS-FIN",
    "WIG.MS-PET",
    "WIG20",
    "WIG20dvp",
    "WIG20lev",
    "WIG20short",
    "WIG20TR",
    "WIG30",
    "WIG30TR",
    "WIGdiv",
    "WIGtech",
]

Co prawda kurs pokazuje zebym po prostu zrobil petle for, dał if i wpisał tylko '20' i '30' ręcznie ale chciałem zrobić to w inny sposób. Chciałbym zrobić tak zeby nadal drukowaly sie nazwy ale w momencie kiedy nie wiem jakie to beda dokladnie liczby

 

Zastosowalem wiec rowniez petle i if


result = []

for index in indexes:
    if index.isdigit():
        result.append(index)

print(result)

Tylko przy uruchomieniu nic nie wyskakuje. Gdzie znowu popelnilem blad? :D Bo nie wiem czy samo dodanie .isdigit() mi tutaj działa bo przy wpisywaniu program mi tego nie podpowiedział mimo wtyczki

3 odpowiedzi

+2 głosów
odpowiedź 5 lutego 2023 przez mokrowski Mędrzec (155,460 p.)

Można użyć sprawdzenia "czy liczba", poprzez iterowanie po każdym znaku. Funkcja any(...), zwraca prawdę jeśli którekolwiek wywołanie zwróci prawdę. Działa więc do 1 znalezienia cyfry.

Wyświetlanie można wykonać przez generatorową postać listy (bo nie podałeś jaki ma być format).

#!/usr/bin/env python3

indexes = [
    "WIG",
    "WIG-banki",
    "WIG-budownictwo",
    "WIG-CEE",
    "WIG-chemia",
    "WIG-energia",
    "WIG-ESG",
    "WIG-górnictwo",
    "WIG-informatyka",
    "WIG-leki",
    "WIG-media",
    "WIG-motoryzacja",
    "WIG-nieruchomości",
    "WIG-odzież",
    "WIG-paliwa",
    "WIG-Poland",
    "WIG-spożywczy",
    "WIG-telekomunikacja",
    "WIG-Ukraine",
    "WIG.GAMES",
    "WIG.MS-BAS",
    "WIG.MS-FIN",
    "WIG.MS-PET",
    "WIG20",
    "WIG20dvp",
    "WIG20lev",
    "WIG20short",
    "WIG20TR",
    "WIG30",
    "WIG30TR",
    "WIGdiv",
    "WIGtech",
]

def is_any_digits(str_value):
    return any(char.isdigit() for char in str_value)

print([str_value for str_value in indexes if is_any_digits(str_value)])
komentarz 5 lutego 2023 przez reaktywny Nałogowiec (41,050 p.)
To rozwiązanie podoba się!
+1 głos
odpowiedź 5 lutego 2023 przez Benek Szeryf (91,070 p.)
isdigit() działa tylko na jeden element, a nie na cały napis. Musisz więc sprawdzić każdy znak albo przynajmniej do pierwszego wystąpienia cyfry. Potem możesz przerwać sprawdzanie dla danego napisu.
+1 głos
odpowiedź 5 lutego 2023 przez VBService Ekspert (253,420 p.)
edycja 5 lutego 2023 przez VBService

Możesz też użyć wyrażenia regularnego z modułu re:

re.search(r'\d', string_value)

 

[ on-line ]

import re
 
indexes = [
    "WIG",
    "WIG-banki",
    "WIG-budownictwo",
    "WIG-CEE",
    "WIG-chemia",
    "WIG-energia",
    "WIG-ESG",
    "WIG-górnictwo",
    "WIG-informatyka",
    "WIG-leki",
    "WIG-media",
    "WIG-motoryzacja",
    "WIG-nieruchomości",
    "WIG-odzież",
    "WIG-paliwa",
    "WIG-Poland",
    "WIG-spożywczy",
    "WIG-telekomunikacja",
    "WIG-Ukraine",
    "WIG.GAMES",
    "WIG.MS-BAS",
    "WIG.MS-FIN",
    "WIG.MS-PET",
    "WIG20",
    "WIG20dvp",
    "WIG20lev",
    "WIG20short",
    "WIG20TR",
    "WIG30",
    "WIG30TR",
    "WIGdiv",
    "WIGtech",
]

 
print([v for v in indexes if bool(re.search(r'\d', v))])

 

można też np. użyć wyrażenia regularnego \d do filtrowania listy indexes

[ on-line ]

import re
  
indexes = [
    "WIG",
    "WIG-banki",
    "WIG-budownictwo",
    "WIG-CEE",
    "WIG-chemia",
    "WIG-energia",
    "WIG-ESG",
    "WIG-górnictwo",
    "WIG-informatyka",
    "WIG-leki",
    "WIG-media",
    "WIG-motoryzacja",
    "WIG-nieruchomości",
    "WIG-odzież",
    "WIG-paliwa",
    "WIG-Poland",
    "WIG-spożywczy",
    "WIG-telekomunikacja",
    "WIG-Ukraine",
    "WIG.GAMES",
    "WIG.MS-BAS",
    "WIG.MS-FIN",
    "WIG.MS-PET",
    "WIG20",
    "WIG20dvp",
    "WIG20lev",
    "WIG20short",
    "WIG20TR",
    "WIG30",
    "WIG30TR",
    "WIGdiv",
    "WIGtech",
]
 
  
print(list(filter(lambda v: bool(re.search(r'\d', v)), indexes)))

 

komentarz 6 lutego 2023 przez Steady Obywatel (1,140 p.)
Oj to chyba jeszcze jestem na totalnych początkach bo takich rzeczy jeszcze w tym kursie nie miałem ale bardzo dziękuje za odpowiedź!

Podobne pytania

0 głosów
1 odpowiedź 384 wizyt
pytanie zadane 25 czerwca 2020 w Python przez mihalrudy Nowicjusz (200 p.)
0 głosów
3 odpowiedzi 965 wizyt
pytanie zadane 9 marca 2017 w Python przez __new__in__town Bywalec (2,100 p.)
0 głosów
1 odpowiedź 1,398 wizyt
pytanie zadane 11 lutego 2021 w Python przez Miwoj01 Nowicjusz (150 p.)

92,584 zapytań

141,434 odpowiedzi

319,671 komentarzy

61,968 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...