Python学习记录02-解压可迭代对象赋值给多个变量

{alert type=”info”}
在上一节,我们将序列分解为单独的变量,有个前提是 必须 变量的个数和序列的长度一样。否则就会报错。

当一个可迭代的对象或者序列的元素数量超过变量数量时候,就会抛出异常。比如下面的例子

  data = ['hello1','hello2','hello3']
    a ,b ,c ,d =data #报错 ValueError: not enough values to unpack (expected 4, got 3)
    a , b = data #报错ValueError: too many values to unpack (expected 2)

{/alert}

**这一节的内容就是要把可迭代对象赋值给多个变量,就算变量数量比可迭代的对象的数量少。
假设有一个需求是这样的。有一个列表,我想把列表的前2个值赋值给2个变量,后面列表的数量我不知道有几个,而且我也不需要。该怎么实现呢**
list1 = [‘hxd1’, ‘hxd2’, ‘110’, ‘119’]

  • 常规思路就是 a1=list1[0] , b1=list1[1] 。这个没啥好说的
  • a,b =list1 。毫无疑问这样会报错。因为list1有4个元素
    此时,我们就可以使用*变量 这种方法。
a,b,*c = list1
print(a,b,c) #hxd1 hxd2 ['110', '119']
print(type(c)) #<class 'list'>

根据输出可以看到,a 和b已经符合要求了。剩下的c接住了所有的变量,不管列表后面还有多少元素,都会赋给c。 而且可以看到c的类型是list

当然*c 这种操作,不止可以放到列表结尾,也可以放到列表的开头部分。

list2=['1','2','3','4','hxd']
*num,name = list2
print(num,name)  # ['1', '2', '3', '4'] hxd
print(type(num))  #<class 'list'>

当然*c 这种操作,不止可以放到列表结尾,也可以放到列表的中间部分。

list3=["nb1","nb2","nb3","nb4"]
a,*_,b = list3  #nb1 ['nb2', 'nb3'] nb4
print(a,_,b)

我们也可以从此得知一个重要结论:num这种解压出来的变量,不管数量是多少个,它的类型永远是list。如果你不需要这些变量,那你可以使用_ 来丢弃没用的变量

num,name = list2 就可以写成 _,name =list2

以上说的是大多是列表,当然字符串也是可以这么操作的。

slogan="!vwo50!"
_,*a,_ = slogan
print(a)  #['v', 'w', 'o', '5', '0']

元组和集合同样可以使用:

turtle1 = (1,2,3,4,5)
print(type(turtle1))
a,*_ = turtle1
print(a,_)  #1 [2, 3, 4, 5]



turtle1 = {1,2,3,4,5}
print(type(turtle1))
*_,b = turtle1
print(_,b)  #[1, 2, 3, 4] 5

个人感觉这节内容的主要场景就是灵活接收变量和分解列表。如果您觉得这篇文章对你有帮助,不妨给我点个赞,这将是我继续分享优质内容的动力。

暂无评论

发送评论 编辑评论


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