07タプル

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.タプルに関連する演算子

  • 等号演算子:==
  • 連結演算子 +
  • リピート演算子 *
  • メンバーシップオペレーターinnot 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.組み込みメソッド

タプルはサイズとコンテンツを変更するのではなくcountindex両方の方法を変更するだけです。

【例】

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'>

おすすめ

転載: blog.csdn.net/Han_Panda/article/details/113092339