>  기사  >  백엔드 개발  >  예제와 함께 Python 튜플에 대한 자세한 설명

예제와 함께 Python 튜플에 대한 자세한 설명

WBOY
WBOY앞으로
2022-03-14 17:46:092560검색

이 글은 python에 대한 관련 지식을 제공합니다. 튜플의 생성, 액세스, 수정, 삭제 및 내장 방법을 포함하여 모든 사람에게 도움이 되기를 바랍니다.

예제와 함께 Python 튜플에 대한 자세한 설명

추천 학습: python tutorial

소개 - Python에서는 프로젝트의 중요한 데이터 정보가 데이터 구조를 통해 저장됩니다. Python 언어에는 목록, 튜플, 사전, 집합 등과 같은 다양한 내장 데이터 구조가 있습니다. 이번 수업에서는 Python의 가장 중요한 데이터 구조 중 하나인 튜플(tuple)에 대해 이야기하겠습니다.

파이썬에서는 튜플을 특별한 종류의 목록으로 생각할 수 있습니다. 목록과 유일한 차이점은 튜플의 데이터 요소를 변경할 수 없다는 것입니다. [이것은 변경되지 않습니다. 데이터 항목을 변경할 수 없을 뿐만 아니라 데이터 항목을 추가하거나 삭제할 수도 없습니다! ]. 불변의 데이터 집합을 생성해야 할 때 우리는 보통 데이터를 튜플에 넣습니다~

1. 튜플 생성 && 액세스

(1) 튜플 생성:

Python에서 튜플을 생성하는 기본 형식은 다음과 같습니다. 데이터 요소를 괄호 "()"로 묶고 각 요소를 쉼표 ","로 구분합니다.
다음과 같습니다.

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

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

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

(2) 액세스:

튜플은 문자열 및 목록과 유사하며 인덱스는 0부터 시작하며 가로채기, 결합 등의 작업을 수행할 수 있습니다.
다음과 같습니다:

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])

예제와 함께 Python 튜플에 대한 자세한 설명

2. 튜플 수정 및 삭제

(1) 튜플 수정:

처음에 튜플은 불변이라고 했지만 여전히 지원되는 기능인 작업 - 연결 및 튜플 사이의 조합:

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

tuple_new = tuple1 + tuple2
print(tuple_new)

예제와 함께 Python 튜플에 대한 자세한 설명

(1) 튜플 삭제:

튜플은 불변이지만 del 문을 통해 전체 튜플을 삭제할 수 있습니다.
다음과 같습니다:

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

print(tuple1)		# 正常打印tuple1

del tuple1

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

예제와 함께 Python 튜플에 대한 자세한 설명

3. 튜플의 내장 메서드

튜플은 불변이지만 내장 메서드를 사용하여 튜플을 조작할 수 있습니다. 일반적으로 사용되는 내장 메소드는 다음과 같습니다.

  1. len(tuple): 튜플에 있는 요소 수를 계산합니다.
  2. max(tuple): 튜플에 있는 요소의 최대값을 반환합니다. tuple): 튜플의 요소를 반환합니다. 최소값
  3. tuple(seq): 목록을 튜플로 변환합니다.
사실 튜플을 먼저 리스트로 변환한 후 연산 후에 튜플로 변환하는 경우가 많습니다(리스트에는 메소드가 많기 때문이죠~).

4. 시퀀스를 개별 변수로 분해

(1)

Python에서는 N 요소를 포함하는 튜플 또는 시퀀스를 N 개별 변수로 분할할 수 있습니다. 이는 Python 구문을 사용하면 간단한 할당 작업을 통해 시퀀스/반복 가능한 개체를 별도의 변수로 분해할 수 있기 때문입니다. 유일한 요구 사항은 변수의 총 개수와 구조가 시퀀스와 일치해야 한다는 것입니다.
다음과 같습니다:


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)

예제와 함께 Python 튜플에 대한 자세한 설명

알 수 없거나 임의 길이의 반복 가능한 객체를 분해하려는 경우 위의 분해 작업이 간단하고 멋지지 않을까요! 일반적으로 이러한 유형의 반복 가능한 객체에는 몇 가지 알려진 구성 요소 또는 패턴이 있습니다(예: 요소 1 뒤의 모든 항목은 전화번호입니다). "*" 별표 표현식을 사용하여 반복 가능한 객체를 분해한 후 개발자는 이러한 패턴을 쉽게 활용하여 다음을 얻을 수 있습니다. 반복 가능한 객체에서 복잡한 작업을 수행할 필요 없이 관련 요소를 사용할 수 있습니다.

Python에서 별표 표현식은 가변 길이 튜플 시퀀스를 반복할 때 매우 유용합니다. 다음은 표시할 일련의 튜플을 분해하는 프로세스를 보여줍니다.

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)

예제와 함께 Python 튜플에 대한 자세한 설명(2)

파이썬에서 리스트나 튜플과 같은 시퀀스를 반복적으로 처리할 때 기록 통계 기능을 구현하기 위해 마지막 몇 개의 레코드를 세어야 하는 경우가 있습니다.

내장된 deque 구현 사용:
from _collections import deque

q = deque(maxlen=3)
q.append(1)
q.append(2)
q.append(3)
print(q)
q.append(4)
print(q)

예제와 함께 Python 튜플에 대한 자세한 설명

은 다음과 같습니다. 시퀀스의 마지막 몇 항목을 기록 레코드로 사용하는 프로세스를 보여줍니다.

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='')
123.txt:
pythonpythonpythonpythonpythonpythonpython

python


python

在上述代码中,对一系列文本行实现了简单的文本匹配操作,当发现有合适的匹配时,就输出当前的匹配行以及最后检查过的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())

在上述代码中,利用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="예제와 함께 Python 튜플에 대한 자세한 설명"></p><p>在上述代码中,因为在1-2中没有添加所以,所以当两个元组的优先级相同时会出错;而在3-4中添加了索引,这样就不会出错了!</p><p>推荐学习:<a href="https://www.php.cn/course/list/30.html" target="_blank">python学习教程</a></p>

위 내용은 예제와 함께 Python 튜플에 대한 자세한 설명의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
이 기사는 csdn.net에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제