Filtrowanie listy słów z podanych znaków

0

Witam,
W jaki sposób mógłbym najprościej przefiltrować plik .txt zawierający kilka tysięcy słów (każde w nowej linii) w taki sposób, żeby pozostały TYLKO słowa które są możliwe są do utworzenia z podanego ciągu znaków, czyli np:

dane = 'ZestawLiter'

...spowoduje, że zostaną tylko słowa, których budowa jest możliwa z podanego w "dane" ciągu znaków.
Nie ma znaczenia wielkość znaku ani kolejność.

2

Wydaje mi się, że tak(zbiór z liter danego słowa musi się zawierać w zbiorze z liter bazowych):

def read_file(f_name):
	with open(f_name, 'r+')as f:
		for x in f:
			yield x.strip()

def test_words(f_name, base_word):
	return [x for x in read_file(f_name) if set(x).issubset(set(base_word))]

def main():
	print(test_words("data.txt", "letters"))
	
if __name__ == '__main__':
	main()
0
lion137 napisał(a):

Wydaje mi się, że tak(zbiór z liter danego słowa musi się zawierać w zbiorze z liter bazowych):

def read_file(f_name):
	with open(f_name, 'r+')as f:
		for x in f:
			yield x.strip()

def test_words(f_name, base_word):
	return [x for x in read_file(f_name) if set(x).issubset(set(base_word))]

def main():
	print(test_words("data.txt", "letters"))
	
if __name__ == '__main__':
	main()

Wielkie dzięki za pomoc!

1

W jaki sposób mógłbym najprościej przefiltrować plik .txt zawierający kilka tysięcy słów

Sprawdźmy. ;-)

> wc -l words
1095695 words
> 

> time -f %e python3 -c 'import sys; want = set("zielar"); {print(end=ln) for ln in sys.stdin if set(ln.rstrip("\n").lower()) <= want}' <words | wc -l
1.31
34456
> 

> time -f %e python3 -c 'import sys; want = set("\nZIELARzielar"); {print(end=ln) for ln in sys.stdin if set(ln) <= want}' <words | wc -l
1.07
34456
> 

> time -f %e python3 -c 'import re, sys; want_re = re.compile("^[zielar]+$", re.IGNORECASE); {print(end=ln) for ln in sys.stdin if want_re.match(ln)}' <words | wc -l
0.67
34456
> 

> time -f %e awk 'tolower($0) ~ /^[zielar]+$/' words | wc -l
0.13
34456
> 

> time -f %e grep -P -i -x '[zielar]+' words | wc -l
0.10
34456
> 

1 użytkowników online, w tym zalogowanych: 0, gości: 1