Mam plik wejściowy z takimi zdaniami:

I like apples
My mother is called Anna.

Przesyłam te zdania na listę, a następnie chcę usunąć słowa, które mają długość <3.

Próbowałem tego:

with open("fis.txt", "r", encoding="utf8") as f:
    lst = [w.lower() for w in f.readlines() if len(w) >= 3]
    print(lst)

Ale daje mi ['i like apples', 'my mother is called anna.']

I chcę uzyskać ['like apples', 'mother called anna.']

Co wydaje się być problemem?

1
user9886692 4 czerwiec 2018, 21:25

3 odpowiedzi

Najlepsza odpowiedź

Próbować:

with open("fis.txt", "r", encoding="utf8") as f:
    print( [" ".join(j for j in w.split() if len(j) >= 3 ) for w in f.readlines() ] )

Wynik:

['like apples', 'mother called Anna.']
2
Rakesh 4 czerwiec 2018, 18:30

Obejmuje całe zdanie, a nie indywidualne słowa, spróbuj iteracji przez W, a następnie sprawdzić długość.

0
Arth Dh 4 czerwiec 2018, 18:31

f.readlines() daje listę z dwoma elementami odpowiadającymi dwoma wierszami pliku.

Musisz przede wszystkim iterować na linii (nie trzeba przeczytać ich do pamięci, iteracji nad f zrobi), podzielą każdą linię, a następnie filtrować słowa.

with open("fis.txt", "r", encoding="utf8") as f:
    lst = [' '.join(w.lower() for w in line.split() if len(w) >= 3) for line in f]
3
timgeb 4 czerwiec 2018, 18:27