Python解压可迭代对象赋值给多个变量详解

目录
  • 问题描述
  • 解决方案
    • 1.将N个元素赋值给N个变量,可以通过如下一个简单的赋值语句实现。
    • 2.如何将N个元素赋值给M个变量(M<N)?
  • 总结
    • 1.任何可迭代对象都可以实现这种解压赋值,包括列表、元组、字符串、文件对象、迭代器和生成器。
    • 2.有时候,你想解压一些元素后丢弃它们,可以使用一个普通的废弃名称,比如_或者ign(ignore)。
    • 3.迭代元素为可变长元组的序列:
    • 4.字符串的分割

问题描述

现在有一个包含N个元素的可迭代对象,怎样把它里面的元素解压后同时赋值给N个变量?怎样同时赋值给M个变量(M<N)?

解决方案

1.将N个元素赋值给N个变量,可以通过如下一个简单的赋值语句实现。

p = [4, 5]
x, y = p
print(x, y)
# 输出结果:4 5
data = ['Test', 1, 3.14, (2021, 12, 1)]
a, b, c, d = data
print(a, b, c, d)
# 输出结果:Test 1 3.14 (2021, 12, 1)
a, b, c, (year, month, day) = data
print(a, b, c, year, month, day)
# 输出结果:Test 1 3.14 2021 12 1

2.如何将N个元素赋值给M个变量(M<N)?

当变量的个数少于可迭代对象元素的个数时,程序会抛出ValueError。这时,可以用Python的星号表达式来解决。

data = [1, 2, 3, 4, 5]
a, b, *c, d = data
print(a, b, c, d)
# 输出结果:1 2 [3, 4] 5

需要注意的是上面解压出的c变量永远是list类型,不管c的元素有几个(包括0个)。

总结

迭代解压语法的几个应用场景:

1.任何可迭代对象都可以实现这种解压赋值,包括列表、元组、字符串、文件对象、迭代器和生成器。

比如:

s = 'hello'
a, b, c, d, e = s
print(a, b, c, d, e)

# 输出结果:h e l l o

2.有时候,你想解压一些元素后丢弃它们,可以使用一个普通的废弃名称,比如_或者ign(ignore)。

record = ('ACME', 50, 123.45, (12, 18, 2012))
name, *_, (*_, year) = record
print(name, year)

"""
输出结果:
ACME 2012
"""

3.迭代元素为可变长元组的序列:

records = [
	('foo', 1, 2),
	('bar', 'hello'),
	('foo', 3, 4),
]

def print_foo(x, y):
	print('foo', x, y)

def print_bar(s):
	print('bar', s)

for tag, *args in records:
	if tag == 'foo':
		print_foo(*args)
	elif tag == 'bar':
		print_bar(*args)

"""
输出结果:
foo 1 2
bar hello
foo 3 4
"""

4.字符串的分割

line = 'nobody:*:-2:-2:Unprivileged User:/var/empty:/usr/bin/false'
uname, *field, homedir, sh = line.split(':')
print(uname, homedir, sh)

"""
输出结果:
nobody /var/empty /usr/bin/false
"""

本篇文章就到这里了,希望能够给你带来帮助,也希望您能够多多关注我们的更多内容!

(0)

相关推荐

  • Python3单行定义多个变量或赋值方法

    你甚至可以在一行内将多个值赋值给多个变量 >>> a , b = 45, 54 >>> a 45 >>> b 54 这个技巧用来交换两个数的值非常方便 >>> a, b = b , a >>> a 54 >>> b 45 要明白这是怎么工作的,你需要学习元组(tuple)这个数据类型.我们是用逗号创建元组.在赋值语句的右边我们创建了一个元组,我们称这为元组封装(tuple packing),赋值语句

  • python批量创建变量并赋值操作

    一,简单的情况: 核心是exec函数,exec函数可以执行我们输入的代码字符串.exec函数的简单例子: exec ('print "hello world"') hello world 可以很清晰的看到,我们给exec传入一个字符串'print "hello world"',exec是执行字符串里面的代码print "hello world".根据这个特性,我们可以用占位符实现我们对变量的定义,如: exec ("temp%s=1&q

  • python实现将列表中各个值快速赋值给多个变量

    我就废话不多说啦,还是直接看代码吧! list1 = [1,2,3,4] a,b,c,d = list1 则 a = 1 b =2 等 这种方式只有当左边的操作数个数和list1长度相同时,才可以这么做,不然报错. 我们假设我们有一个list对象List,它的长度足够长,想把它从下标i开始的k个元素赋给k个元素,可以这么做: v1, v2, v3, -, vk = List[i : i + k] #默认i=0, k=len(List) 补充知识:python 将某个字段存储为列表类型 实现存储数

  • python中如何对多变量连续赋值

    看到一段代码,如下 self.batch_size = batch_size = 128 初一看很诧异,仔细想想其实很合理的. 在python可能会需要同时声明多个变量,并对多个变量赋予相同的初始值,可以采用如下的方式赋值 a=b=c=1 但这里也需要注意,如果赋值为列表或者字典,比如 a=b=c=[1,2,3] 则a.b.c都是指向列表的指针,而不是复制,改变一个,其它的也会改变. 比如令 a[1] = 4, 则 b=[1,4,3] python 赋值和拷贝 你真的了解吗? 现象:先上一段代码

  • python实现同时给多个变量赋值的方法

    本文实例讲述了python实现同时给多个变量赋值的方法.分享给大家供大家参考.具体分析如下: python中可以同时给多个变量赋值,下面列举了三种方法 # Assign values directly a, b = 0, 1 assert a == 0 assert b == 1 # Assign values from a list (r,g,b) = ["Red","Green","Blue"] assert r == "Red&q

  • Python解压可迭代对象赋值给多个变量详解

    目录 问题描述 解决方案 1.将N个元素赋值给N个变量,可以通过如下一个简单的赋值语句实现. 2.如何将N个元素赋值给M个变量(M<N)? 总结 1.任何可迭代对象都可以实现这种解压赋值,包括列表.元组.字符串.文件对象.迭代器和生成器. 2.有时候,你想解压一些元素后丢弃它们,可以使用一个普通的废弃名称,比如_或者ign(ignore). 3.迭代元素为可变长元组的序列: 4.字符串的分割 问题描述 现在有一个包含N个元素的可迭代对象,怎样把它里面的元素解压后同时赋值给N个变量?怎样同时赋值给

  • Java解压和压缩带密码的zip文件过程详解

    前言 JDK自带的ZIP操作接口(java.util.zip包,请参看文章末尾的博客链接)并不支持密码,甚至也不支持中文文件名. 为了解决ZIP压缩文件的密码问题,在网上搜索良久,终于找到了winzipaes开源项目. 该项目在google code下托管 ,仅支持AES压缩和解压zip文件( This library only supports Win-Zip's 256-Bit AES mode.).网站上下载的文件是源代码,最新版本为winzipaes_src_20120416.zip,本

  • 浅谈Python中的可迭代对象、迭代器、For循环工作机制、生成器

    1.iterable iterator区别 要了解两者区别,先要了解一下迭代器协议: 迭代器协议是指:对象需要提供__next__()方法,它返回迭代中的元素,在没有更多元素后,抛出StopIteration异常,终止迭代. 可迭代对象就是:实现了迭代器协议的对象. 协议是一种约定,可迭代对象实现迭代器协议,Python的内置工具(如for循环,sum,min,max函数等)通过迭代器协议访问对象,因此,for循环并不需要知道对象具体是什么,只需要知道对象能够实现迭代器协议即可. 迭代器(ite

  • python中的数组赋值与拷贝的区别详解

    具体的注解我已经写在了程序里面:通俗的解释了python里面的浅拷贝与深拷贝的不同,请看程序. # -*- coding: utf-8 -*- import numpy as np import copy as cp import matplotlib.pyplot as plt import time import math fig = plt.figure() ax = fig.add_subplot(241) # 定义一个多维数组 x = np.array([[1, 2, 3], [4,

  • Python的对象传递与Copy函数使用详解

    1.对象引用的传值或者传引用 Python中的对象赋值实际上是简单的对象引用.也就是说,当你创建一个对象,然后把它赋值给另一个变量的时候,Python并没有拷贝这个对象,而是拷贝了这个对象的引用.这种方式相当于值传递和引用传递的一种综合.如果函数收到的是一个可变对象(比如字典或者列表)的引用,就能修改对象的原始值--相当于通过"引用传递"来赋值.如果函数收到的是一个不可变变量(比如数字.字符串或者元祖)的引用,就不能直接修改原始对象--相当于通过"值传递"来赋值.

  • python dict 字典 以及 赋值 引用的一些实例(详解)

    最近在做一个很大的数据库方面的东东,要用到根据数值来查找,于是想到了python中的字典,平时没用过dict这个东东 用的最多的还是 list 和 tuple (网上查 用法一大堆) 看了一下创建字典的方法: 方法1: dict = {'name': 'earth', 'port': 80} 方法2: fdict = dict((['x', 1], ['y', 2])) 方法3: ddict = {}.fromkeys(('x', 'y'), -1) 都实验了一下这些方法,发现不好用,做不出来自

  • python学习之可迭代对象、迭代器、生成器

    Iterable – 可迭代对象 能够逐一返回其成员项的对象. 可迭代对象的例子包括所有序列类型 (例如 list, str 和 tuple) 以及某些非序列类型例如 dict, 文件对象以及定义了__iter__()方法或是实现了序列语义的__getitem__() 方法的任意自定义类对象. 可迭代对象可用于 for 循环以及许多其他需要一个序列的地方(zip().map() -).当一个可迭代对象作为参数传给内置函数 iter() 时,它会返回该对象的迭代器.这种迭代器适用于对值集合的一次性

  • 稳扎稳打学Python之容器 可迭代对象 迭代器 生成器专题讲解

    目录 一.容器 1.什么是容器? 二.可迭代对象 1.什么是可迭代对象? 三.迭代器 四.序列 五.列表推导式 六.生成器 1.生成器的第一种创建方法:生成器表达式 2.生成器的第二种创建方法:yield 七.小结 今天就来给大家讲讲Python中的容器.可迭代对象.迭代器和生成器这些难理解的概念,让你的Python基础更上一层楼! 一.容器 1.什么是容器? 在Python中,容器是把多种元素组织在一起的数据结构,容器中的元素就可以逐个迭代获取.说白了,它的作用就像它的名字一样:用来存放东西(

  • Java编程实现对象克隆(复制)代码详解

    克隆,想必大家都有耳闻,世界上第一只克隆羊多莉就是利用细胞核移植技术将哺乳动物的成年体细胞培育出新个体,甚为神奇.其实在Java中也存在克隆的概念,即实现对象的复制. 本文将尝试介绍一些关于Java中的克隆和一些深入的问题,希望可以帮助大家更好地了解克隆. 假如说你想复制一个简单变量.很简单: int apples = 5; int pears = apples; 不仅仅是int类型,其它七种原始数据类型(boolean,char,byte,short,float,double.long)同样适

  • Python中可变变量与不可变变量详解

    目录 一 .常见的变量分类 1.变量的创建 二.变量分类 1..常见的不可变变量 2.常见的可变变量 三.拷贝的差别 四.参数传递的差别 前言: C++不同于Python的显著特点,就是有指针和引用,这让我们在调用参数的时候更加清晰明朗.但Python中没有指针和引用的概念,导致很多时候参数的传递和调用的时候会产生疑问:我到底是复制了一份新的做操作还是在它指向的内存操作? 这个问题根本上和可变.不可变变量有关,我想把这个二者的区别和联系做一个总结,以更深入地理解Python内部的操作.我本身非科

随机推荐