011、元组
本文最后更新于 68 天前,其中的信息可能已经过时,如有错误请发送邮件到wuxianglongblog@163.com

元组

基本操作

与列表类似,元组是一个有序序列,但是不可变。

元组用小括号()生成:

t = (10, 11, 12, 13, 14)
t
(10, 11, 12, 13, 14)

可以索引,切片:

t[0]
10
t[1:3]
(11, 12)

元组是不可变的,不能通过赋值改变:

t[0] = 1
---------------------------------------------------------------------------

TypeError                                 Traceback (most recent call last)

Input In [5], in ()
----> 1 t[0] = 1

TypeError: 'tuple' object does not support item assignment

单元素的元组生成

由于()在表达式中被应用,只含有单个元素的元组容易和表达式混淆,所以采用下列方式定义只有一个元素的元组:

a = (10)
a
10
type(a)
int
a = (10,)
a
(10,)
type(a)
tuple

列表与元组的转换

用构造方法listtuple可以相互转换:

a = [10, 11, 12, 13, 14]
tuple(a)
(10, 11, 12, 13, 14)
a = (10, 11, 12, 13, 14)
list(a)
[10, 11, 12, 13, 14]

元组方法

由于元组是不可变的,所以只能有一些不可变自身的方法,例如计算元素个数.count()方法和元素位置.index()方法,用法与列表一样:

a = (10, 11, 12, 13, 14)
a.count(10)
1
a.index(12)
2

列表与元组的速度比较

IPython 中用 magic 命令 %timeit 来计时。

比较列表与元组的生成速度:

%timeit -n 100000 [1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25]
108 ns ± 5.29 ns per loop (mean ± std. dev. of 7 runs, 100,000 loops each)
%timeit -n 100000 (1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25)
12.7 ns ± 2.44 ns per loop (mean ± std. dev. of 7 runs, 100,000 loops each)

在遍历上,元组和列表的速度表现差不多。

产生内容相同的随机列表和元组:

from numpy.random import rand

values = rand(10000,4)

lst = [list(row) for row in values]
tup = tuple(tuple(row) for row in values)
%timeit -n 100 for row in lst: tuple(row)
719 µs ± 52.2 µs per loop (mean ± std. dev. of 7 runs, 100 loops each)
%timeit -n 100 for row in tup: tuple(row)
514 µs ± 29.8 µs per loop (mean ± std. dev. of 7 runs, 100 loops each)

比较遍历和索引速度:

%timeit -n 100 for row in lst: a = row[0] + 1
2.61 ms ± 112 µs per loop (mean ± std. dev. of 7 runs, 100 loops each)
%timeit for row in tup: a = row[0] + 1
2.51 ms ± 88.9 µs per loop (mean ± std. dev. of 7 runs, 100 loops each)

总结:元组的生成速度会比列表快很多,迭代速度快一点,索引速度差不多。

元组与多变量赋值

Python支持多变量赋值的模式:

a, b = 1, 2
a
1
b
2

Python中的多变量赋值,本质是两个元组中的元素进行一一对应,此时,等号两边的元素数目必须相等。例如,将包含两个元素的元组t的值分别赋给a和b:

t = (1, 2)
a, b = t
a
1

利用多变量赋值,变量的交换可以用一行代码实现:

a, b = b, a
a
2

多变量赋值支持超过两个值的操作,只要等号两边的元素数相同:

a, b, c = 1, 2, 3

嵌套:

a, (b, c) = 1, (2, 3)

带星号的赋值,将后面的值都变成一个列表给某个变量赋值:

a, *b = 1, 2, 3
b
[2, 3]
a
1
谨此笔记,记录过往。凭君阅览,如能收益,莫大奢望。
暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇