Datawhaleオープンソース学習ライブラリから転載
https://github.com/datawhalechina/team-learning-program/tree/master/PythonLanguage
タプル
「タプル」定義構文は次のとおりです。(元素1, 元素2, ..., 元素n)
- 括弧はすべての要素を結び付けます
- コンマは各要素を1つずつ分離します
1.タプルを作成してアクセスします
- Pythonタプルはリストに似ていますが、文字列と同様に、作成後にタプルを変更できない点が異なります。
- タプルには括弧を使用し、リストには角括弧を使用します。
- タプルはリストに似ており、整数を使用してインデックスを作成し、スライスします。
【例】
t1 = (1, 10.31, 'python')
t2 = 1, 10.31, 'python'
print(t1, type(t1))
# (1, 10.31, 'python') <class 'tuple'>
print(t2, type(t2))
# (1, 10.31, 'python') <class 'tuple'>
tuple1 = (1, 2, 3, 4, 5, 6, 7, 8)
print(tuple1[1]) # 2
print(tuple1[5:]) # (6, 7, 8)
print(tuple1[:5]) # (1, 2, 3, 4, 5)
tuple2 = tuple1[:]
print(tuple2) # (1, 2, 3, 4, 5, 6, 7, 8)
- 括弧()を使用してタプルを作成することも、何も使用しないこともできます。読みやすくするために、()を使用することをお勧めします。
- タプルに要素が1つしかない場合は、要素の後にコンマを追加する必要があります。そうしないと、括弧が演算子として使用されます。
【例】
x = (1)
print(type(x)) # <class 'int'>
x = 2, 3, 4, 5
print(type(x)) # <class 'tuple'>
x = []
print(type(x)) # <class 'list'>
x = ()
print(type(x)) # <class 'tuple'>
x = (1,)
print(type(x)) # <class 'tuple'>
【例】
print(8 * (8)) # 64
print(8 * (8,)) # (8, 8, 8, 8, 8, 8, 8, 8)
【例】2次元タプルを作成します。
x = (1, 10.31, 'python'), ('data', 11)
print(x)
# ((1, 10.31, 'python'), ('data', 11))
print(x[0])
# (1, 10.31, 'python')
print(x[0][0], x[0][1], x[0][2])
# 1 10.31 python
print(x[0][0:2])
# (1, 10.31)
2.タプルを更新および削除します
【例】
week = ('Monday', 'Tuesday', 'Thursday', 'Friday')
week = week[:2] + ('Wednesday',) + week[2:]
print(week) # ('Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday')
[例]タプルは不変であるため、タプルの要素に直接値を割り当てることはできませんが、タプルの要素を変更(変更可能)できる限り、その要素を直接変更できます。これは要素が異なります。
t1 = (1, 2, 3, [4, 5, 6])
print(t1) # (1, 2, 3, [4, 5, 6])
t1[3][0] = 9
print(t1) # (1, 2, 3, [9, 5, 6])
3.タプルに関連する演算子
- 等号演算子:
==
- 連結演算子
+
- リピート演算子
*
- メンバーシップオペレーター
in
、not in
"等号=="、メンバーとメンバーの位置が同じ場合にのみTrueを返します。
タプルをスプライスするには、「プラス記号+」と「乗算記号*」の2つの方法があります。前者は最後にスプライスされ、後者はコピーされてスプライスされます。
【例】
t1 = (123, 456)
t2 = (456, 123)
t3 = (123, 456)
print(t1 == t2) # False
print(t1 == t3) # True
t4 = t1 + t2
print(t4) # (123, 456, 456, 123)
t5 = t3 * 3
print(t5) # (123, 456, 123, 456, 123, 456)
t3 *= 3
print(t3) # (123, 456, 123, 456, 123, 456)
print(123 in t3) # True
print(456 not in t3) # False
4.組み込みメソッド
タプルはサイズとコンテンツを変更するのではなくcount
、index
両方の方法を変更するだけです。
【例】
t = (1, 10.31, 'python')
print(t.count('python')) # 1
print(t.index(10.31)) # 1
count('python')
タプルがt
要素に記録されて数回出現しますが、1回は明らかですindex(10.31)
この要素はタプルt
インデックスにあり、明らかに1です。
5.タプルを解凍します
【例】1次元タプルを解凍します(左括弧がいくつかの変数を定義するいくつかの要素があります)
t = (1, 10.31, 'python')
(a, b, c) = t
print(a, b, c)
# 1 10.31 python
【例】2次元タプルを解凍します(タプル内のタプル構造に応じて変数を定義します)
t = (1, 10.31, ('OK', 'python'))
(a, b, (c, d)) = t
print(a, b, c, d)
# 1 10.31 OK python
【例】タプルに少数の要素のみが必要な場合は、英語ではワイルドカードと呼ばれるワイルドカード文字「*」を使用します。これは、コンピューター言語で1つ以上の要素を表します。次の例は、rest
変数をスローした複数の要素です。
t = 1, 2, 3, 4, 5
a, b, *rest, c = t
print(a, b, c) # 1 2 5
print(rest) # [3, 4]
【例】rest変数を全く気にしない場合は、ワイルドカード「*」とアンダースコア「_」を使用してください。
t = 1, 2, 3, 4, 5
a, b, *_ = t
print(a, b) # 1 2
練習用の質問:
1.タプルの概念
次のコードの実行結果と最終結果のタイプを記述します
(1, 2)*2
(1, )*2
(1)*2
そのような結果がある理由を分析します。
2.開梱プロセスとは何ですか?
a, b = 1, 2
上記のプロセスは開梱されていますか?
反復可能なオブジェクトを解凍するときに、プレースホルダーに値を割り当てる方法は?
個人的な答えを練習する:
6つの演習
6.1
# 列表操作练习
lst = [2,5,6,7,8,9,2,9,9]
#01
lst.append(15)
print(lst)
[2, 5, 6, 7, 8, 9, 2, 9, 9, 15]
#02
lst.insert(len(lst)//2,20)
print(lst)
[2, 5, 6, 7, 8, 20, 9, 2, 9, 9, 15]
#03
lst.extend([2,5,6])
print(lst)
[2, 5, 6, 7, 8, 20, 9, 2, 9, 9, 15, 2, 5, 6]
#04
lst.pop(3)
print(lst)
[2, 5, 6, 8, 20, 9, 2, 9, 9, 15, 2, 5, 6]
#05
lst.reverse()
print(lst)
[6, 5, 2, 15, 9, 9, 2, 9, 20, 8, 6, 5, 2]
#06
lst.sort()
print(lst)
lst.sort(reverse=True)
print(lst)
[2, 2, 2, 5, 5, 6, 6, 8, 9, 9, 9, 15, 20]
[20, 15, 9, 9, 9, 8, 6, 6, 5, 5, 2, 2, 2]
6.2
lst = [1,[4,6],True]
lst[0] = lst[0]*2
lst[1][0] = lst[1][0]*2
lst[1][1] = lst[1][1]*2
print(lst)
[2, [8, 12], True]
6.3
# leetcode 852题 山脉数组的峰顶索引
# 山脉数组定义
# (1)数组k长度大于或等于3 (最大元素具有唯一性)
# (2)存在i,0<=i<=n 且 k[0]<k[1]……k[i-1]<k[i]>k[i+1]>……k[n]
def mountainArray(a):
list1 = a[:]
list1.sort()
ismountain = False
if list1.count(list1[-1])==1: # 判断最大值是否唯一
i = a.index(list1[-1]) # 获取最大值对应原列表索引
# 构造对比列表
list_left = a[:i+1]
list_left.sort()
list_right = a[i:]
list_right.sort(reverse=True)
# 判断是否是山脉
if((list_left==a[:i+1]) and (list_right==a[i:])):
# 利用集合无重复项,判断山脉两侧是否有重复
if(len(list_left)==len(set(a[:i+1])) and len(list_right)==len(set(a[i:]))):
ismountain = True
return ismountain
print(mountainArray([1, 3, 4, 5, 3])) # True
print(mountainArray([1, 2, 4, 6, 4, 5])) # False
True
False
7つの演習
7.1
x = (1,2)*2
print(x,type(x))
(1, 2, 1, 2) <class 'tuple'>
x =(1,)*2
print(x,type(x))
(1, 1) <class 'tuple'>
x = (1)*2
print(x,type(x))
2 <class 'int'>
7.2
a,b = 1,2
print(a,b)
1 2
x =1,2
a,b = x
print(x,type(x))
print(a,type(a))
print(b,type(b))
(1, 2) <class 'tuple'>
1 <class 'int'>
2 <class 'int'>