加入收藏 | 设为首页 | 会员中心 | 我要投稿 河北网 (https://www.hebeiwang.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 建站 > 正文

Python编程中3个常用的数据布局和算法

发布时间:2019-04-15 19:46:35 所属栏目:建站 来源:程序员爱学习
导读:Python内置了很多很是有效的数据布局,好比列表(list)、荟萃(set)以及字典(dictionary)。就绝大部门环境而言,我们可以直接行使这些数据布局。可是,凡是我们还必要思量好比搜刮、排序、分列以及筛选等这一类常见的题目。 本篇文章将先容3种常见的数据布局
副问题[/!--empirenews.page--]

Python内置了很多很是有效的数据布局,好比列表(list)、荟萃(set)以及字典(dictionary)。就绝大部门环境而言,我们可以直接行使这些数据布局。可是,凡是我们还必要思量好比搜刮、排序、分列以及筛选等这一类常见的题目。

本篇文章将先容3种常见的数据布局和同数据有关的算法。另外,在collections模块中也包括了针对各类数据布局的办理方案。

Python编程中3个常用的数据布局和算法

1. 将序列解析为单独的变量

(1) 题目

我们有一个包括 N 个元素的元组或序列,此刻想将它解析为N个单独的变量。

(2) 办理方案

任何序列(或可迭代的工具)都可以通过一个简朴的赋值操纵来解析为单独的变量。独一的要求是变量的总数和布局要与序列相相符。譬喻:

  1. >>> p = (4, 5) 
  2. >>> x, y = p 
  3. >>> x 
  4. >>> y 
  5. >>> 
  6. >>> data = [ 'ACME', 50, 91.1, (2012, 12, 21) ] 
  7. >>> name, shares, price, date = data 
  8. >>> name 
  9. 'ACME' 
  10. >>> date 
  11. (2012, 12, 21) 
  12. >>> name, shares, price, (year, mon, day) = data 
  13. >>> name 
  14. 'ACME' 
  15. >>> year 
  16. 2012 
  17. >>> mon 
  18. 12 
  19. >>> day 
  20. 21 
  21. >>> 

假如元素的数目不匹配,将获得一个错误提醒。譬喻:

  1. >>> p = (4, 5) 
  2. >>> x, y, z = p 
  3. Traceback (most recent call last): 
  4.  File "<stdin>", line 1, in <module> 
  5. ValueError: need more than 2 values to unpack 
  6. >>> 

(3) 接头

现实上不只仅只是元组或列表,只要工具刚好是可迭代的,那么就可以执行解析操纵。这包罗字符串、文件、迭代器以及天生器。好比:

  1. >>> s = 'Hello' 
  2. >>> a, b, c, d, e = s 
  3. >>> a 
  4. 'H' 
  5. >>> b 
  6. 'e' 
  7. >>> e 
  8. 'o' 
  9. >>> 

当做解析操纵时,偶然辰也许想扬弃某些特定的值。Python并没有提供非凡的语法来实现这一点,可是凡是可以选一个用不到的变量名,以此来作为要扬弃的值的名称。譬喻:

  1. >>> data = [ 'ACME', 50, 91.1, (2012, 12, 21) ] 
  2. >>> _, shares, price, _ = data 
  3. >>> shares 
  4. 50 
  5. >>> price 
  6. 91.1 
  7. >>> 

可是请确保选择的变量名没有在其他处所用到过。

2. 从恣意长度的可迭代工具中解析元素

(1) 题目

必要从某个可迭代工具中解析出N个元素,可是这个可迭代工具的长度也许高出N,这会导致呈现“解析的值过多(too many values to unpack)”的非常。

(2) 办理方案

Python的“*表达式”可以用来办理这个题目。譬喻,假设开设了一门课程,并抉择在期末的功课后果中去掉第一个和最后一个,只对中间剩下的后果做均匀分统计。假如只有4个后果,也容许以简朴地将4个都解析出来,可是假若有24个呢?*表达式使这统统都变得简朴:

  1. def drop_first_last(grades): 
  2.  first, *middle, last = grades 
  3.  return avg(middle) 

另一个用例是假设有一些用户记录,记录由姓名和电子邮件地点构成,后头随着恣意数目的电话号码。则可以像这样解析记录:

  1. >>> record = ('Dave', 'dave@example.com', '773-555-1212', '847-555-1212') 
  2. >>> name, email, *phone_numbers = user_record 
  3. >>> name 
  4. 'Dave' 
  5. >>> email 
  6. 'dave@example.com' 
  7. >>> phone_numbers 
  8. ['773-555-1212', '847-555-1212'] 
  9. >>> 

(编辑:河北网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

热点阅读