Detaillierte Erklärung von Python-Tupeln mit Beispielen

WBOY
Freigeben: 2022-03-14 17:46:09
nach vorne
2543 Leute haben es durchsucht

Dieser Artikel vermittelt Ihnen relevantes Wissen über Python. Er stellt hauptsächlich verwandte Themen zu Tupeln vor, einschließlich der Erstellung, des Zugriffs, der Änderung, des Löschens und der integrierten Methoden von Tupeln.

Detaillierte Erklärung von Python-Tupeln mit Beispielen

Empfohlenes Lernen: Python-Tutorial

Einführung – In Python werden wichtige Dateninformationen im Projekt durch Datenstrukturen gespeichert. Die Python-Sprache verfügt über eine Vielzahl integrierter Datenstrukturen wie Listen, Tupel, Wörterbücher und Mengen usw. In diesem Kurs werden wir über eine der wichtigsten Datenstrukturen in Python sprechen – Tupel.

In Python können wir uns Tupel als eine besondere Art von Liste vorstellen. Der einzige Unterschied zu einer Liste besteht darin, dass die Datenelemente im Tupel nicht geändert werden können [dies bleibt unverändert – nicht nur die Datenelemente können nicht geändert werden, sondern auch Datenelemente können nicht hinzugefügt oder gelöscht werden! 】. Wenn wir einen Satz unveränderlicher Daten erstellen müssen, ordnen wir die Daten normalerweise in Tupeln an um die Datenelemente in Klammern „()“ einzuschließen und jedes Element durch ein Komma „,“ zu trennen. Wie folgt:

tuple1 = ('xiaoming', 'xiaohong', 18, 21)
tuple2 = (1, 2, 3, 4, 5)

# 而且——是可以创建空元组哦!
tuple3 = ()

# 小注意——如果你创建的元组只包含一个元素时,也不要忘记在元素后面加上逗号。让其识别为一个元组:
tuple4 = (22, )
Nach dem Login kopieren

(2) Zugriff:

Tupel ähneln Zeichenfolgen und Listen. Die Indizes beginnen bei 0 und es können Operationen wie Abfangen und Kombinieren ausgeführt werden.

Wie folgt:

tuple1 = ('xiaoming', 'xiaohong', 18, 21)
tuple2 = (1, 2, 3, 4, 5)

# 显示元组中索引为1的元素的值
print("tuple1[1]:", tuple1[0])

# 显示元组中索引从1到3的元素的值
print("tuple2[1:3]:", tuple2[1:3])
Nach dem Login kopieren

2. Tupeländerung und -löschung


(1) Tupeländerung:

Obwohl zu Beginn gesagt wurde, dass Tupel unveränderlich sind, gibt es dennoch eine unterstützte Funktion – Verbindung und Kombination zwischen Tupeln: Detaillierte Erklärung von Python-Tupeln mit Beispielen

tuple1 = ('xiaoming', 'xiaohong', 18, 21)
tuple2 = (1, 2, 3, 4, 5)

tuple_new = tuple1 + tuple2
print(tuple_new)
Nach dem Login kopieren

(1) Löschen von Tupeln:

Obwohl das Tupel unveränderlich ist, kann das gesamte Tupel durch die del-Anweisung gelöscht werden.
Wie folgt:

Detaillierte Erklärung von Python-Tupeln mit Beispielen

tuple1 = ('xiaoming', 'xiaohong', 18, 21)

print(tuple1)		# 正常打印tuple1

del tuple1

print(tuple1)		# 因为上面删除了tuple1,所以再打印会报错哦!
Nach dem Login kopieren

3. Integrierte Methoden von Tupeln


Tupel sind unveränderlich, aber wir können Tupel mithilfe integrierter Methoden manipulieren. Häufig verwendete integrierte Methoden sind wie folgt:

Detaillierte Erklärung von Python-Tupeln mit Beispielen

len(tupel): Berechnen Sie die Anzahl der Elemente in einem Tupel;

max(tupel): Gibt den Maximalwert der Elemente im Tupel zurück

min( Tupel): Gibt die Elemente im Tupel zurück. Der Mindestwert;

tupel(seq): Konvertieren Sie die Liste in ein Tupel.
  1. Tatsächlich konvertieren wir Tupel in den meisten Fällen zuerst in Listen und dann nach der Operation in Tupel (da Listen viele Methoden haben ~).
  2. 4. Zerlegen Sie eine Sequenz in separate Variablen
  3. (1)

Python ermöglicht die Aufteilung eines Tupels oder einer Sequenz mit N Elementen in N separate Variablen. Dies liegt daran, dass die Python-Syntax es ermöglicht, jede Sequenz/ein iterierbares Objekt durch eine einfache Zuweisungsoperation in separate Variablen zu zerlegen. Die einzige Voraussetzung besteht darin, dass die Gesamtzahl und Struktur der Variablen mit der Sequenz übereinstimmen. Wie folgt:

tuple1 = (18, 22)
x, y = tuple1
print(x)
print(y)

tuple2 = ['xiaoming', 33, 19.8, (2012, 1, 11)]
name, age, level, date = tuple2
print(name)
print(date)
Nach dem Login kopieren

Wenn Sie ein iterierbares Objekt unbekannter oder beliebiger Länge zerlegen möchten, wäre die obige Zerlegungsoperation nicht unkompliziert und schön? Normalerweise gibt es in dieser Art von iterierbaren Objekten einige bekannte Komponenten oder Muster (zum Beispiel: Alles nach Element 1 ist eine Telefonnummer. Nachdem der Sternchenausdruck „*“ zum Zerlegen des iterierbaren Objekts verwendet wurde, können Entwickler diese Muster leicht nutzen, um sie zu erhalten verwandte Elemente, ohne komplexe Operationen in iterierbaren Objekten durchführen zu müssen.

In Python ist der Sternchenausdruck sehr nützlich, wenn über eine Tupelfolge variabler Länge iteriert wird. Im Folgenden wird der Prozess der Zerlegung einer Folge von zu markierenden Tupeln veranschaulicht.

records = [
    ('AAA', 1, 2),
    ('BBB', 'hello'),
    ('CCC', 5, 3)
]

def do_foo(x, y):
    print('AAA', x, y)

def do_bar(s):
    print('BBB', s)

for tag, *args in records:
    if tag == 'AAA':
        do_foo(*args)
    elif tag == 'BBB':
        do_bar(*args)

line = 'guan:ijing234://wef:678d:guan'
uname, *fields, homedir, sh = line.split(':')
print(uname)
print(*fields)
print(homedir)
print(sh)
Nach dem Login kopieren
Detaillierte Erklärung von Python-Tupeln mit Beispielen

(2)

Bei der iterativen Verarbeitung von Sequenzen wie Listen oder Tupeln in Python ist es manchmal notwendig, die letzten paar Datensätze zu zählen, um die Verlaufsstatistikfunktion zu implementieren.

Detaillierte Erklärung von Python-Tupeln mit BeispielenDie Verwendung der integrierten Deque-Implementierung:

from _collections import deque

q = deque(maxlen=3)
q.append(1)
q.append(2)
q.append(3)
print(q)
q.append(4)
print(q)
Nach dem Login kopieren

ist wie folgt – sie demonstriert den Prozess der Verwendung der letzten paar Elemente in der Sequenz als historische Aufzeichnung.

from _collections import deque

def search(lines, pattern, history=5):
    previous_lines = deque(maxlen=history)

    for line in lines:
        if pattern in line:
            yield line, previous_lines
        previous_lines.append(line)
# Example use on a file
if __name__ == '__main__':
    with open('123.txt') as f:
        for line, prevlines in search(f, 'python', 5):
            for pline in prevlines:	# 包含python的行
                print(pline)  # print (pline, end='')
            # 打印最后检查过的N行文本
            print(line)  # print (pline, end='')
Nach dem Login kopieren
123.txt:

pythonpythonpythonpythonpythonpythonpython

python


python
Nach dem Login kopieren
Detaillierte Erklärung von Python-Tupeln mit Beispielen

在上述代码中,对一系列文本行实现了简单的文本匹配操作,当发现有合适的匹配时,就输出当前的匹配行以及最后检查过的N行文本。使用deque(maxlen=N)创建了一个固定长度的队列。当有新记录加入而使得队列变成已满状态时,会自动移除最老的那条记录。当编写搜索某项记录的代码时,通常会用到含有yield关键字的生成器函数,它能够将处理搜索过程的代码和使用搜索结果的代码成功解耦开来。

5.实现优先级队列

使用内置模块heapq可以实现一个简单的优先级队列。
如下——演示了实现一个简单的优先级队列的过程。

import heapq
class PriorityQueue:
    def __init__(self):
        self._queue = []
        self._index = 0

    def push(self, item, priority):
        heapq.heappush(self._queue, (-priority, self._index, item))
        self._index += 1

    def pop(self):
        return heapq.heappop(self._queue)[-1]

class Item:
    def __init__(self, name):
        self.name = name

    def __repr__(self):
        return 'Item({!r})'.format(self.name)

q = PriorityQueue()
q.push(Item('AAA'), 1)
q.push(Item('BBB'), 4)
q.push(Item('CCC'), 5)
q.push(Item('DDD'), 1)
print(q.pop())
print(q.pop())
print(q.pop())
Nach dem Login kopieren

在上述代码中,利用heapq模块实现了一个简单的优先级队列,第一次执行pop()操作时返回的元素具有最高的优先级。
拥有相同优先级的两个元素(foo和grok)返回的顺序,同插入到队列时的顺序相同。

函数heapq.heappush()和heapq.heappop()分别实现了列表_queue中元素的插入和移除操作,并且保证列表中的第一个元素的优先级最低。

函数heappop()总是返回“最小”的元素,并且因为push和pop操作的复杂度都是O(log2N),其中N代表堆中元素的数量,因此就算N的值很大,这些操作的效率也非常高。

上述代码中的队列以元组 (-priority, index, item)的形式组成,priority取负值是为了让队列能够按元素的优先级从高到底排列。这和正常的堆排列顺序相反,一般情况下,堆是按从小到大的顺序进行排序的。变量index的作用是将具有相同优先级的元素以适当的顺序排列,通过维护一个不断递增的索引,元素将以它们加入队列时的顺序排列。但是当index在对具有相同优先级的元素间进行比较操作,同样扮演一个重要的角色。

在Python中,如果以元组(priority, item)的形式存储元素,只要它们的优先级不同,它们就可以进行比较。但是如果两个元组的优先级相同,在进行比较操作时会失败。这时可以考虑引入一个额外的索引值,以(priority, index, item)的方式建立元组,因为没有哪两个元组会有相同的index值,所以这样就可以完全避免上述问题。一旦比较操作的结果可以确定,Python就不会再去比较剩下的元组元素了。

如下——演示了实现一个简单的优先级队列的过程:

import heapq
class PriorityQueue:
    def __init__(self):
        self._queue = []
        self._index = 0

    def push(self, item, priority):
        heapq.heappush(self._queue, (-priority, self._index, item))
        self._index += 1

    def pop(self):
        return heapq.heappop(self._queue)[-1]

class Item:
    def __init__(self, name):
        self.name = name

    def __repr__(self):
        return 'Item({!r})'.format(self.name)

# ①
a = Item('AAA')     
b = Item('BBB')
#a <p><img src="https://img.php.cn/upload/article/000/000/067/49d26f0b616718a47cdbeebb6cfbf35b-7.png" alt="Detaillierte Erklärung von Python-Tupeln mit Beispielen"></p><p>在上述代码中,因为在1-2中没有添加所以,所以当两个元组的优先级相同时会出错;而在3-4中添加了索引,这样就不会出错了!</p><p>推荐学习:<a href="https://www.php.cn/course/list/30.html" target="_blank">python学习教程</a></p>
Nach dem Login kopieren

Das obige ist der detaillierte Inhalt vonDetaillierte Erklärung von Python-Tupeln mit Beispielen. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Verwandte Etiketten:
Quelle:csdn.net
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage
Über uns Haftungsausschluss Sitemap
Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!