Hallo, hier ist der Blog von Token_w, herzlich willkommen.
Heute werde ich hauptsächlich die Verwendungsfähigkeiten von Python-Wörterbüchern und -Sets in der tatsächlichen Programmierung erläutern.
Es ist nicht einfach zu organisieren und wird Ihnen hilfreich sein. Ich hoffe auf Ihre Unterstützung! dankbar! ! !
Inhaltsverzeichnis
- 1. Wie filtere ich Daten nach Bedingungen in Listen, Wörterbüchern und Sammlungen?
- 2. Wie benenne ich jedes Element im Tupel, um die Lesbarkeit des Programms zu verbessern?
- 3. Wie zählt man die Häufigkeit des Auftretens von Elementen in der Sequenz?
- 4. Wie sortiere ich die Elemente im Wörterbuch nach der Größe der Werte im Wörterbuch?
- 5. Wie finde ich schnell gemeinsame Schlüssel in mehreren Wörterbüchern?
- 6. Wie halte ich das Wörterbuch in Ordnung?
- 7. Wie wird die Verlaufsaufzeichnungsfunktion des Benutzers implementiert?
- Zusammenfassen
1. Wie filtere ich Daten nach Bedingungen in Listen, Wörterbüchern und Sammlungen?
tatsächlicher Fall
- Fall 1: Negative Zahlen in der Liste herausfiltern [3, 9, -1, 10, 20, -2, …]
- Fall 2: Filtern Sie die Elemente heraus, deren Wert höher als 90 im Wörterbuch ist {'lisi': 79, 'Jin': 88, 'lucy': 93, … }
- Fall 3: Es ist relativ einfach, die Elemente in der Menge {77, 89, 34, 20, 21…} herauszufiltern, die durch 3 teilbar sind. Die übliche Methode besteht darin, jedes Element in der Liste, im Wörterbuch
und in der Menge zu iterieren der Reihe nach und führen Sie den Zustandsrichter durch.
Aber in Python gibt es fortgeschrittenere Möglichkeiten, diese Art von Problem zu lösen, und es ist einfacher und effizienter.
01 Fall 1: Negative Zahlen in der Liste herausfiltern [3, 9, -1, 10, 20, -2, …]
Methode 1: Verwenden Sie die Filterfunktion
from random import randint
# 使用列表解析生成 -10~10 之间的10个元素
data = [randint(-10, 10) for _ in range(10)]
print('原始列表为:' , data)
# filter(function or None, iterable) --> filter object
data_o = filter(lambda x: x >= 0, data)
for each in data_o:
print(each)
Methode 2: Verwenden Sie ein Listenverständnis
from random import randint
# 使用列表解析生成 -10~10 之间的10个元素
data = [randint(-10, 10) for _ in range(10)]
print('原始列表为:', data)
data_o = [x for x in data if x >= 0]
print(data_o)
02 Fall 2: Elemente aus dem Wörterbuch herausfiltern, deren Wert größer als 90 ist {'lisi': 79, 'Jin': 88, 'lucy': 93, … }
from random import randint
# 使用字典解析生成 一个字典
d ={
x: randint(60, 100) for x in range(1, 10)}
print(d)
d_o = {
k: v for k, v in d.items() if v >= 90}
print(d_o)
03 Fall 3: Filtern Sie die durch 3 teilbaren Elemente in der Menge {77, 89, 34, 20, 21...} aus
from random import randint
# 使用集合解析生成 -10~10 之间的10个元素
data = {
randint(-10, 10) for _ in range(10)}
print('原始集合为:', data)
data_o = {
x for x in data if x % 3 == 0}
print(data_o)
2. Wie benenne ich jedes Element im Tupel, um die Lesbarkeit des Programms zu verbessern?
stuents = ('Jim', 16, 'male', '[email protected]')
name=stuents[0]
age=stuents[1]
sex= stuents[2]
email=stuents[3]
print(name, age, sex, email)
01 Methode 1: Definieren Sie Aufzählungstypen ähnlich wie in anderen Sprachen, dh definieren Sie eine Reihe numerischer Konstanten
s=stuents = ('Jim', 16, 'male', '[email protected]')
NAME, AGE, SEX, EMAIL = range(4)
name=s[NAME]
age=s[AGE]
sex= s[SEX]
email=s[EMAIL]
print(name, age, sex, email)
02 Methode 2: Verwenden Sie „collections.namedtuple“ in der Standardbibliothek, um das integrierte Tupel zu ersetzen
from collections import namedtuple
Student = namedtuple('Student', ['name', 'age', 'sex', 'email'])
s = Student('Jim', 16, 'male', '[email protected]')
print(s)
# Student(name='Jim', age=16, sex='male', email='[email protected]')
print(s.name)
# 'Jim'
print(s.age)
# 16
print(s.sex)
# 'male'
print(s.email)
# '[email protected]'
3. Wie zählt man die Häufigkeit des Auftretens von Elementen in der Sequenz?
Fall 1:
Methode 1: Traditionelle Methode
from random import randint
# 随机生成一个列表
data = [randint(0, 20) for _ in range(30)]
# 以列表中的值为字典的键,0为字典的值建立字典
c = dict.fromkeys(data, 0)
# 依次遍历列表,遇到一个元素,就把字典中对应的键的值加1
for x in data:
c[x] += 1
print(c)
Methode 2: Verwenden Sie dascollections.Counter-Objekt
Übergeben Sie die Sequenz an den Konstruktor von Counter und erhalten Sie das Counter-Objekt als Wörterbuch der Elementhäufigkeiten.
Die Methode Counter.most_common(n) ruft die Liste der n Elemente mit der höchsten Häufigkeit ab
from random import randint
from collections import Counter
# 随机生成一个列表
data = [randint(0, 20) for _ in range(30)]
c = Counter(data)
# 得到的 c 就是一个collections.Counter类型的数据,和方法 一 结果一样
# 用法与字典一样,例如 c[2] , 就是得到 键为2 对应的值
print(c)
# 另外,还可以使用 most_common() 方法得到 出现频率最高的几个键和值
print(c.most_common(3)) # 输出前3名
Fall 2:
from collections import Counter
import re
with open('./test.txt', 'r') as f:
txt = f.read()
# 使用 正则表达式 对文本进行切割,按照 非字母字符 进行切割
l1 = re.split('\W+', txt)
c = Counter(l1)
# 得到频率最高的10个单词
print(c.most_common(10))
4. Wie sortiere ich die Elemente im Wörterbuch nach der Größe der Werte im Wörterbuch?
01 Methode 1: Verwenden Sie zip, um Wörterbuchdaten in Tupel umzuwandeln
from random import randint
# 生成随机字典
d = {
x:randint(60,100) for x in 'xyzabc'}
print(d)
# 把值放在前面,键放在后面,构成元组,每个元组为列表的一个项
# 得到的结果为 [(74, 'z'), (80, 'y')...]形式
list1 = zip(d.values(), d.keys())
# 然后对得到的列表进行排序,就会以列表中的元组的第一项排序,相同时再比较第二项
print(sorted(list1))
02 Methode 2: Verwenden Sie den Schlüsselparameter der sortierten Funktion
from random import randint
# 生成随机字典
d = {
x:randint(60,100) for x in 'xyzabc'}
print(d)
# d.items() 也是一个元组的列表,只是元组中键在前,值在后
# 使用 key 参数设置以第二项 (值)作为排序依据
print(sorted(d.items(), key = lambda x: x[1]))
5. Wie finde ich schnell gemeinsame Schlüssel in mehreren Wörterbüchern?
01 Methode 1: Traditionelle Methode, abwechselnd traversieren
from random import randint, sample
# 随机产生 3 场球赛的 进球人和数
s1 = {
x: randint(1,4) for x in sample('abcdefg',randint(3,6))}
s2 = {
x: randint(1,4) for x in sample('abcdefg',randint(3,6))}
s3 = {
x: randint(1,4) for x in sample('abcdefg',randint(3,6))}
print(s1)
print(s2)
print(s3)
# 传统方法
res = []
for k in s1:
if k in s2 and k in s3:
res.append(k)
print(res)
02 Methode 2: Verwenden Sie die Schnittoperation der Menge (Menge)
Verwenden Sie die Methode „keys()“ des Wörterbuchs, um einen Satz von Schlüsseln eines Wörterbuchs abzurufen.
Nehmen Sie den Schnittpunkt der Schlüsselsätze aller Wörterbücher
from random import randint, sample
# 随机产生 3 场球赛的 进球人和数
s1 = {
x: randint(1,4) for x in sample('abcdefg',randint(3,6))}
s2 = {
x: randint(1,4) for x in sample('abcdefg',randint(3,6))}
s3 = {
x: randint(1,4) for x in sample('abcdefg',randint(3,6))}
print(s1)
print(s2)
print(s3)
print(s1.keys() & s2.keys() & s3.keys())
6. Wie halte ich das Wörterbuch in Ordnung?
d = dict()
d['Jim']=(1.35)
d['Leo']=(2,37)
d['Bob']=(3,45)
for k in d:
print(k)
Methode: Sammlungen.OrderedDict verwenden
Ersetzen Sie das Wörterbuch Dict durch OrderedDict und speichern Sie die Punktzahlen der Spieler der Reihe nach in OrderedDict.
from collections import OrderedDict
d = OrderedDict()
d['Jim']=(1.35)
d['Leo']=(2,37)
d['Bob']=(3,45)
for k in d:
print(k)
7. Wie wird die Verlaufsaufzeichnungsfunktion des Benutzers implementiert?
Der Originalcode lautet wie folgt:
from random import randint
N = randint(0, 100)
def guess(k):
if k == N:
print('猜对了')
return True
elif k < N:
print('猜小了')
else:
print('猜大了')
return False
while True:
line = input("please input a number:")
if line.isdigit():
k = int(line)
if guess(k):
break
Wir wollen die letzten 5 Vermutungen speichern, die vorherigen werden gelöscht
Lösung:
Verwenden Sie eine Warteschlange mit einer Kapazität von n (n = 5 in diesem Beispiel), um den Verlauf zu speichern.
Verwenden Sie Deque aus der Standardbibliothek, bei der es sich um eine doppelendige zirkuläre Warteschlange handelt
from random import randint
from collections import deque
history = deque([], 5)
N = randint(0, 100)
def guess(k):
if k == N:
print('猜对了')
return True
elif k < N:
print('猜小了')
else:
print('猜大了')
return False
while True:
line = input("please input a number:")
if line.isdigit():
k = int(line)
history.append(k)
if guess(k):
break
elif line == 'history' or line == 'h?':
print(history)
Wenn wir beim nächsten Ausführen des Programms auch den vorherigen Verlauf anzeigen möchten, müssen wir das Warteschlangenobjekt auf der Festplatte speichern und können Pickle verwenden
pickle kann jede Art von Daten (einschließlich Zahlen, Listen, Wörterbüchern, Zeichenfolgen usw.) in Festplattendateien speichern und bei Bedarf als Originaldaten zurücklesen
Lösung: Bevor das Programm beendet wird, können Sie mit pickle das Warteschlangenobjekt in einer Datei speichern und es importieren, wenn Sie das Programm erneut ausführen
Verwendung von Gurke:
Daten schreiben:
import pickle
data = [1, 2, 3, 4]
with open('data.dat', 'wb') as f:
pickle.dump(data, f)
Daten lesen:
import pickle
with open('data.dat', 'rb') as f:
data = pickle.load(f)
print(data)
Zusammenfassen
Heute werde ich Ihnen anhand einiger grundlegender Codefälle einige Tipps zur Verwendung von Wörterbüchern und Mengen in Python in der tatsächlichen Programmierung geben. Ich hoffe, es wird Ihnen hilfreich sein!