返回顶部
首页 > 资讯 > 后端开发 > Python >python CookBook 3 1.
  • 251
分享到

python CookBook 3 1.

pythonCookBook 2023-01-31 01:01:13 251人浏览 八月长安

Python 官方文档:入门教程 => 点击学习

摘要

问题:    你需要从一个可迭代对象中拆解出N个元素,但是它可能多于N个元素并导致抛出“too many values to unpack”的异常解决:    python的“带星参数”可以搞定这个问题。比如说,你开了一门课并且决定在期末的

问题:

   你需要从一个可迭代对象中拆解出N个元素,但是它可能多于N个元素并导致抛出“too many values to unpack”的异常


解决:

   python的“带星参数”可以搞定这个问题。比如说,你开了一门课并且决定在期末的时候,你将去掉第一次和最后一次的家庭作业的成绩再计算出剩余的平均成绩。如果只有四次作业,那就是小意思妥妥的无压力秒杀。可如果是有24次作业呢? 带星参数将能很好地解决这个问题:


def drop_first_last(grades):

   first, *middle, last = grades

   return avg(middle)


另一个栗子,假设你有包含了用户名,邮箱及一坨长度任意的电话号码。你可以这么处理:

   P.S   Python2.7.6会报错

书上的例子有一处打印错

>>> name, email, *phone_numbers = record
>>> record = ('Dave', 'dave@example.com', '773-555-1212', '847-555-1212')
>>> name, email, *phone_numbers = record #书上此处为 user_record
>>> name
'Dave'
>>> email
'dave@example.com'
>>> phone_numbers
['773-555-1212', '847-555-1212']
>>>


无论有多少个要拆解或为None phones_number变量总会是一个列表,因此在对phones_number变量做处理时,无须做是否为列表的类型检查。(撒花!!)

带星参数 也可用于列表开头。比如说,你有一个关于你公司过去8个季度的销售数据序列。如果你想知道最后一个季度与前七个季度的平均值相比哪个更好。你可以这么处理:

*trailing_Qtrs, current_qtr = sales_record

trailing_avg = sum(trailing_qtrs) / len(trailing_qtrs)

return avg_comparison(trailing_avg, current_qtr)


栗子!栗子:

>>> *trailing, current = [10, 8, 7, 1, 9, 5, 10, 3]
>>> trailing
[10, 8, 7, 1, 9, 5, 10]
>>> current
3
>>>


讨论:

   可扩展的迭代对象的拆解适用于拆解长度未知或任意的可迭代对象。经常的情况是这类可迭代对象的一些结构是已知的。带星参数可以方便让你访问到相关的元素。


>>> records = [ ('foo', 1, 2), ('bar', 'hello'), ('foo', 3, 4)]
>>> def do_foo(x, y):
    print('foo', x, y)
                                                                
>>> def do_bar(s):
    print('bar', s)
                                                                
>>> for tag, *args in records:
    if tag == 'foo':
        do_foo(*args)
    elif tag == 'bar':
        do_bar(*args)
                                                                    
foo 1 2
bar hello
foo 3 4
>>>

带星的拆解 在诸如抄截字符串时也很有用。

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


有时,我会想干掉分离出来的元素。你不能就单单使用带星参数了,你可以使用一个常见的表示可抛弃的变量名 像是 ‘_’或者 ign(ignored)

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


列表:

>>> items = [1, 10, 7, 4, 5, 9]
>>> head, *tail = items
>>> head
1
>>> tail
[10, 7, 4, 5, 9]
>>>


有人会想到写个方法以便执行一些递归算法

>>> def sum(items):
    head, *tail = items
    return head + sum(tail) if tail else head
>>> sum(items)
36
>>>


--结束END--

本文标题: python CookBook 3 1.

本文链接: https://www.lsjlt.com/news/183732.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • python CookBook 3 1.
    问题:    你需要从一个可迭代对象中拆解出N个元素,但是它可能多于N个元素并导致抛出“too many values to unpack”的异常解决:    python的“带星参数”可以搞定这个问题。比如说,你开了一门课并且决定在期末的...
    99+
    2023-01-31
    python CookBook
  • python cookbook 3 翻译
    自己买了个影印版,边翻边看边实践以期增强学习效果。计划是每日一个小片段,希望能坚持到底。P.S 翻得不好,请轻拍。。1 数据结构与算法1.1 将一个序列分离转换成多个变量问题:    如果你有一个由N个元素组成的元组或序列并想将其分离成多个...
    99+
    2023-01-31
    python cookbook
  • FLEX 3 COOKBOOK
    FLEX 3 COOK BOOK ,等了好长时间,,哈哈!先下载了看看。有需要的朋友请到[url]http://www.riabook.cn/en_book/flex-3-cookbook.htm[/url]  下载。...
    99+
    2023-01-31
    FLEX COOKBOOK
  • python之cookbook-day0
    第一章:数据结构和算法 1.2 解压可迭代对象赋值给多个变量 问题: 如果一个可迭代对象的元素个数超过变量个数时,会抛出一个 ValueError 。那么 怎样才能从这个可迭代对象中解压出 N 个元素出来? 解决方案: Python 的星...
    99+
    2023-01-30
    python cookbook
  • Python入门3-变量1
    1.变量   例:bread = 5, print(bread)则输出5 2.元组(使用“()”进行赋值),赋值后,其值不可以再次修改   可理解为数组   breakfast = ("coffee","tea","eggs")   读取...
    99+
    2023-01-31
    变量 入门 Python
  • java 输出1^1+2^2+3^3+.
    可以采用递归 有需要一直循环的内容...
    99+
    2023-01-31
    java
  • 求s=1+1(1+2)+1(1+2+3)
    求s=1+1/(1+2)+1/(1+2+3)….+1/(1+2+3….+n)的值#include <stdio.h>float fun(int n){int i,s1=0;float s=0.0;for(i=1;i<=n...
    99+
    2023-01-31
  • Python -- 操作字符串[1/3]
    1,in和not in   yuan@ThinkPad-SL510:~$ ipython -nobanner  In [1]: uname = "Linux #50-Ubuntu SMP Fri Mar 18 19:00:26 UTC 2...
    99+
    2023-01-31
    字符串 操作 Python
  • Python 练习——计算1-2+3-4
    # 求1-99的所有数的和 count = 1 s = 0 while count < 100: s += count count += 1 print(s) 当都为正数时,即1+2+3+...+99,如上,很简...
    99+
    2023-01-30
    Python
  • 第1章 python 基础语法(3)
    =================目录==================1.8 字典1.9 字典练习2.0/2.1 流程控制-if条件判断 ======================================= dic={}字典是...
    99+
    2023-01-31
    语法 基础 python
  • raid0、1、3、5
    Redundant Array of Inexpensive Disks,简称RAID, RAID将普通硬盘组成一个磁盘阵列,在主机写入数据,RAID控制器把主机要写入的数据分解为多个数据块,然后并行写入磁盘阵列;主机读取数据时,RAID控...
    99+
    2023-01-31
  • c语言:求多项式1-1/2+1/3-1/
    方法一:for循环实现 程序: #include<stdio.h> int main() { double i = 0, t = 0,sum = 0,sign = -1; for (i = 1; i <= 100; i+...
    99+
    2023-01-31
    多项式 语言
  • ctfhub -afr -1 2 3
    afr-1  打开题目链接 默认的传参数据为 p=hello 更改一下试试看  p=111  无回显 p=flag  回显了  no no no  想到了 php任意文件读取 p=php://filter/read=convert....
    99+
    2023-09-09
    php nginx 安全 网络安全 web安全
  • C语言计算1/1+1/2+1/3+…+1/n的问题
    目录计算1/1+1/2+1/3+…+1/n计算1+1/2+1/3+......+1/100计算1/1+1/2+1/3+…+1/n 只用注意一个问题,整数的...
    99+
    2022-11-16
    C语言计算 1/1+1/2+1/3+…+1/n C语言1/1+1/2+1/3+
  • 计算2/1+3/2+5/3+8/5+..
    #define _CRT_SECURE_NO_WARNINGS #include<stdio.h> int main() {  double a = 1.0;  double b = 1.0;  double Sn = 0;  ...
    99+
    2023-01-31
  • 1-3 Winform 中的常用控件(3
    8.案例学习:使用组合框控件 本次实验目标是在FORM窗体上建立一个列表框控件,两个组合框控件以及一个文本框控件,通过这些控件彼此之间的关联,学习并掌握ComboBox组合框控件的主要属性和方法。本次实验目标如图1-15所示。&#...
    99+
    2023-01-31
    控件 常用 Winform
  • 2017.12.25 3周1次课
    三周第一次课(12月25日)2.27linux和windows互传文件  3.1 用户配置文件和密码配置文件 3.2 用户组管理 3.3 用户管理2.27linux和windows互传文件 要使用xshell和securecrt,putty...
    99+
    2023-01-31
  • 战略思考3+1
        之所以说“战略思考”(Strategic Thinking)而不是说“战略思维”,是不想把题目搞得太大,最后弄得自己都不好收拾。     以老刘的愚见,战略思考和非战略思考的区别在于“度”,基本上,这个“度”包括三个维度...
    99+
    2023-01-31
    战略
  • Python_005_求1-2+3-4+
    n = 1 s = 0 while n < 100: temp = n % 2 if temp == 0: s = s - n else: s = s + n ...
    99+
    2023-01-31
  • 1+2+3+...+100算法
    问题:计算1+2+3+...+100的结果 一般解答:     int i,sum=0,n=100;     for(i=1;i<=n;i++)     {       sum=sum+i;     }     printf("%d"...
    99+
    2023-01-31
    算法
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作