设为首页 收藏本站
查看: 459|回复: 0

[经验分享] python 系统学习笔记(四)--list

[复制链接]

尚未签到

发表于 2017-5-3 09:13:21 | 显示全部楼层 |阅读模式
  

1、列表
  
  列表是一种用于保存有序元素集合的数据结构,即你可以在列表中存储元素序列。考虑一个购物清单,上面有你需要购买的物品列表,只不过你可能希望以分号分隔他们而到Python变成了逗号。
  列表元素被包含在方括号中,这样Python就会才会明白你指定的是一个列表。一点列表创建完毕,我们可以对其元素进行添加,删除和搜索。正是因为可以执行添加和删除操作,我们将列表称作可变类型,即这种类型可以被修改。

对象和类的快速简介
  列表是使用对象和类的一个例子。当我们对变量i赋值时,例如赋值5,这相当于创建一个Int类(类型)的对象(实例),你可以参看help(int)来更好的理解它。
  一个类同样可以拥有方法,即函数,而他们只能应用与这个类。并且只有当你拥有一个类的对象时才能使用这些功能。例如,Python为列表提供了一个append方法允许我们将元素添加到列表的表尾。如,mylist.append(‘an item’)将字符串添加到列表mylist的尾部。注意,要用点号访问对象方法。
  一个类还可以拥有字段,而字段只不过是专门应用与一个类的变量而已。当你拥有对应类的对象时就能使用这些变量了。字段同样利用点号访问,如,mylist.field。
  
  1、list:列表(即动态数组,C++标准库的vector,但可含不同类型的元素于一个list中)

a = ["I","you","he","she"] #元素可为任何类型。

  下标:按下标读写,就当作数组处理

以0开始,有负下标的使用

0第一个元素,-1最后一个元素,

-len第一个元素,len-1最后一个元素

取list的元素数量

len(list) #list的长度。实际该方法是调用了此对象的__len__(self)方法。

  创建连续的list

L = range(1,5) #即 L=[1,2,3,4],不含最后一个元素

L = range(1, 10, 2) #即 L=[1, 3, 5, 7, 9]

  list的方法

L.append(var) #追加元素

L.insert(index,var)

L.pop(var) #返回最后一个元素,并从list中删除之

L.remove(var) #删除第一次出现的该元素

L.count(var) #该元素在列表中出现的个数

L.index(var) #该元素的位置,无则抛异常

L.extend(list) #追加list,即合并list到L上

L.sort() #排序

L.reverse() #倒序

list 操作符:,+,*,关键字del

a[1:] #片段操作符,用于子list的提取

[1,2]+[3,4] #为[1,2,3,4]。同extend()

[2]*4 #为[2,2,2,2]

del L[1] #删除指定下标的元素

del L[1:3] #删除指定下标范围的元素

list的复制

L1 = L #L1为L的别名,用C来说就是指针地址相同,对L1操作即对L操作。函数参数就是这样传递的

L1 = L[:] #L1为L的克隆,即另一个拷贝。


list comprehension

[ <expr1> for k in L if <expr2> ]

  定义list
  li=["a","b","mpilgrim","z","example"]
  向list中增加元素
  li.append("new")
  li.insert(2,"new")
  li.extend(["two","elements"])
  

  
  

extend(扩展) 与append(追加) 的差别

Lists 的两个方法 extend 和 append 看起来类似,但实际上完全不同。extend 接受一个参数,这个参数总是一个 list,并且把这个 list 中的每个元素添加到原 list 中。

在这里 list 中有 3 个元素 ('a'、'b' 和 'c'),并且使用另一个有 3 个元素 ('d'、'e' 和 'f') 的 list 扩展之,因此新的 list 中有 6 个元素。

另一方面,append 接受一个参数,这个参数可以是任何数据类型,并且简单地追加到 list 的尾部。在这里使用一个含有 3 个元素的 list 参数调用 append 方法。

原来包含 3 个元素的 list 现在包含 4 个元素。为什么是 4 个元素呢?因为刚刚追加的最后一个元素本身是个 list。List 可以包含任何类型的数据,也包括其他的 list。这或许是您所要的结果,或许不是。如果您的意图是 extend,请不要使用append。







List 运算符



Lists 也可以用 + 运算符连接起来。list = list + otherlist 相当于 list.extend(otherlist)。但 + 运算符把一个新 (连接后) 的 list 作为值返回,而 extend 只修改存在的 list。也就是说,对于大型 list 来说,extend 的执行速度要快一些。

Python 支持 += 运算符。li += ['two'] 等同于 li.extend(['two'])。+= 运算符可用于 list、字符串和整数,并且它也可以被重载用于用户自定义的类中 (更多关于类的内容参见 第 5 章)。

* 运算符可以作为一个重复器作用于 list。li = [1, 2] * 3 等同于 li = [1, 2] + [1, 2] + [1, 2],即将三个 list 连接成一个。



list 的分片 (slice)


  
  
  
  您可以通过指定 2 个索引得到 list的子集,叫做一个 “slice” 。返回值是一个新的 list,它包含了 list 中按顺序从第一个 slice 索引 (这里为 li[1]) 开始,直到但是不包括第二个 slice 索引 (这里为 li[3]) 的所有元素。
  如果一个或两个 slice 索引是负数,slice 也可以工作。如果对您有帮助,您可以这样理解:从左向右阅读 list,第一个 slice 索引指定了您想要的第一个元素,第二个 slice 索引指定了第一个您不想要的元素。返回的值为在其间的每个元素。
  List 从 0 开始,所以 li[0:3] 返回 list 的前 3 个元素,从 li[0] 开始,直到但不包括 li[3]。
  

Slice 简写
  
  
  
  如果左侧分片索引为 0,您可以将其省略,默认为 0。所以 li[:3] 同 “list 的分片 (slice)” 的 li[0:3] 是一样的。
  同样的,如果右侧分片索引是 list 的长度,可以将其省略。所以 li[3:] 同 li[3:5] 是一样的,因为这个 list 有 5 个元素。
  请注意这里的对称性。在这个包含 5 个元素的 list 中,li[:3] 返回前 3 个元素,而 li[3:] 返回后 2 个元素。实际上,li[:n] 总是返回前 n 个元素,而 li[n:] 将返回剩下的元素,不管 list 有多长。
  如果将两个分片索引全部省略,这将包括 list 的所有元素。但是与原始的名为 li 的 list 不同,它是一个新 list,恰好拥有与 li 一样的全部元素。li[:] 是生成一个 list 完全拷贝的一个简写。
  
  检索列表的值,四种方式:in、not in、count、index,后两种方式是列表的方法。

示例列表:a_list = ['a','b','c','hello']:

判断值是否在列表中,in操作符:

'a' in a_list<wbr>//判断值a是否在列表中,并返回True或False</wbr>

  判断值是否不在列表,not in操作符:

'a' not in a_list<wbr><wbr>//判断a是否不在列表中,并返回True或False</wbr></wbr>

  统计指定值在列表中出现的次数,count方法:

a_list.count('a')<wbr>//返回a在列表中的出现的次数</wbr>

  

在 list 中搜索






  
  查看指定值在列表中的位置,index方法:

a_list.index('a')<wbr><wbr>//返回a在列表中每一次出现的位置,默认搜索整个列表<br>
a_list.index('a',0,3)<wbr>//返回a在指定切片内第一次出现的位置</wbr></wbr></wbr>

  
  

  使用join链接list成为字符串
  params={"server":"mpilgrim","database":"master","uid":"sa","pwd":"secret"}
  ";".join(["%s=%s"%(k,v)fork,vinparams.items()])
  输出'pwd=secret;database=master;uid=sa;server=mpilgrim
  join只能用于元素是字符串的list;它不进行任何的类型强制转换。连接一个存在一个或多个非字符串元素的list将引发一个异常。
  

  利用list 传参数
  
  def a(b,c):
    print b,c
  a(1,2)
  a(*[1,2])
  a(**{'b':1,'c':2}) #字典
  
  

  list的映射解析
   li=[1,9,8,4]
   li=[elem*2foreleminli]
  

  列表过滤

  
  li = ["a", "mpilgrim", "foo", "b", "c", "b", "d", "d"]
  print [elem for elem in li if len(elem) > 1]
  print [elem for elem in li if elem != "b"]
  print [elem for elem in li if li.count(elem) == 1]
  
  
  
练习题
  1.删除list里面的重复元素,并对其排序,然后对里面元素乘以2 并去掉大于10的元素
   输入input1=[1,3,5,1,7] input2=[2,3,8] input3=[3,4]
   要求输出 b=[2,4,6,8,10] ,其过程要求用函数实现 参考上一章可变参数可变(VarArgs)参数
  举例 一下是一个简单的求和

sum=0
a=[1,2,3,4]
def uniq(*Nums):
global sum
for num in Nums:
sum=num+sum
uniq(*a)
print sum

  提示过程,传入元素为list的list 然后遍历list 进行合并......

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-372350-1-1.html 上篇帖子: python-ldap安装失败解决办法 下篇帖子: [Python] 函数lambda(), filter(), map(), reduce()
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表