python的学习笔记01_4基础数据类型列表 元组 字典 集合 其他其他(for,enumerate,range)..._???111的博客-程序员宅基地

技术标签: python  

列表

定义:[]内以逗号分隔,按照索引,存放各种数据类型,每个位置代表一个元素
  特性:
    1.可存放多个值
    2.可修改指定索引位置对应的值,可变
    3.按照从左到右的顺序定义列表元素,下标从0开始顺序访问,有序

、创建列表 只要把逗号分隔的不同数据项,使用方括号[],括起来即可,  下标(角标索引)从0开始,最后一个一个元素下标可以写-1

list = ['1' , '2' , '3']

list = [] 空列表

 

二、增:

name.insert(2,"wenqiang")  #列表name的索引为2的位置添加一个元素 wenqiang

name.append(“01”)     #列表name的末尾,添加一个元素“01” 

name.append([1,2,3,4])   #列表name的末尾,添加一个列表

name.extend('abcde')    #列表name的末尾,迭代的增加多个元素

迭代着增加:就是数据类型的最小组成单位作为列表的一个元素进行增加

 

三、删:

name.pop()  #按照下标进行删除,默认删除最后一个(有返回值)

name.remove()  #remove()直接在字符串中查找括号内的元素,并删除

name.clear()  #清空列表,使列表变成一个空的

del name  #直接删除内存文件,导致name这个列表不存在

 

四、改:

name[0] = "x"  #通过对索引位置重新赋值,达到更改元素内容的目的

name[0:2] = ["1" , "2" , "3"]  #更改可切片

 

五、查:

name = [1,2,3,4,5,6]

print(name[0])  #通过下表进行查找元素

name.index(“2”)  #通过index 查找元素2 在列表name中的位置下标

 

六、排序和反转:

name.sort()       #正向排序

name.sort(reverse = True)  #反向排序

name.reverse  #反转

 

七、列表操作函数:

name = [1,2,3,1,23,1,2]

1.name.count("1")  #计数,通过count统计列表name中,元素 1 出现的次数

2.len(name)  #列表元素个数

3.max(list)    #返回列表元素最大值

4.min(list)    #返回列表元素最小值

5.list(seq)     #将元组seq强制转换成列表

6. enumerate()    #打印元素对应的下标

 

八,list 循环和切片

 1,循环

for i in list:

       print i

如果直接for 循环一个list 的时候,那么每次循环的值都是这个list 里面的元素

2,切片(list 取值的一种方法)

name[n:m]  切片是不包含后面那个元素的值(顾头不顾尾)

name[:m] 如果切片前面一个值缺省的话,从开头开始取

name[n:] 如果切片后面的值缺省的话,取到末尾

name[:] 如果全部缺省,取全部

name[n:m:s] s:步长  隔多少个元素取一次

步长是正数,从左往右取

步长是负数,从右往左取

注:切片同样适用于字符串,字符串也有下标

 

 九、列表生成式

列表生成式即List Comprehensions,是Python内置的非常简单却强大的可以用来创建list的生成式。

实例1:要生成list [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]可以用list(range(1, 11)):list = list(range(1,11))

实例2:生成[1x1, 2x2, 3x3, ..., 10x10]可以用  list = list(x * x for x in range(1,11))
实例3:for循环后面还可以加上if判断,这样我们就可以筛选出仅偶数的平方:list = list(x * x for x in range(1,11) if x%2== 0)
实例4:使用两层循环,可以生成全排列:
list = [m + n for m in 'ABC' for n in 'XYZ']
print(list)
输出结果:['AX', 'AY', 'AZ', 'BX', 'BY', 'BZ', 'CX', 'CY', 'CZ']
实例5:for循环其实可以同时使用两个甚至多个变量,比如dict的items()可以同时迭代key和value:
法一:
>>> d = {
     'x': 'A', 'y': 'B', 'z': 'C' }
>>> for k, v in d.items():
...     print(k, '=', v)
...
y = B
x = A
z = C
法二:
>>> d = {
     'x': 'A', 'y': 'B', 'z': 'C' }
>>> [k + '=' + v for k, v in d.items()]
['y=B', 'x=A', 'z=C']
View Code

 

元组

定义:与列表类似,只不过[]改成()

  特性:

    1.可存放多个值
    2.不可变
    3.按照从左到右的顺序定义元组元素,下标从0开始顺序访问,有序

元祖的创建

  ages = (11, 22, 33, 44, 55)
  或
  ages = tuple((11, 22, 33, 44, 55))
  顺序及下标图示

元祖的常用操作

  索引

  切片  

  循环

  长度

  包含

元祖的特性详解

  1.可存放多个值

    如果元祖中只有一个值

t = (1,)
t = (1)   #<==>t = 1

    元祖中不仅可以存放数字、字符串,还可以存放更加复杂的数据类型

  2.不可变 

    元祖本身不可变,如果元祖中还包含其他可变元素,这些可变元素可以改变

元祖相关知识拾遗

  字典中遇到的tuple

   1.字典的定义

    元祖可以作为字典的key:

dic = {('alex','male'):'v1',('wusir','male'):'v2'}
print(dic)

     字典定义可以用到元祖:

person = dict((['name','苑昊'],['文周',18]))
person = dict((('name','苑昊'),('文周',18)))
print(person)

   2.字典的items方法,将字典中的每一项作为元祖返回

dic = {'k1':'v1','k2':'v2'}
print(dic.items())
#dict_items([('k1', 'v1'), ('k2', 'v2')])

    再讲循环

dic = {'key1':'value1','key2':'value2'}
for key,value in dic.items():
    print(key,value)

 

字典

字典是Python语言中唯一的映射类型。

  定义:{key1:value1,key2:value2}

        1、键与值用冒号“:”分开;
        2、项与项用逗号“,”分开;
  特性:

      1.key-value结构

        2.key必须可hash、且必须为不可变数据类型、必须唯一

        3.可存放任意多个值、可修改、可以不唯一

        4.无序

字典的创建

  person = {"name": "alex", 'age': 20}
  或
  person = dict(name='seven', age=20)
  person = dict({"name": "egon", 'age': 20})
  person = dict((['name','苑昊'],['文周',18]))
  {}.fromkeys(seq,100) #不指定100默认为None

  注意:

>>> dic={}.fromkeys(['k1','k2'],[])
>>> dic
{'k1': [], 'k2': []}
>>> dic['k1'].append(1)
>>> dic
{'k1': [1], 'k2': [1]} 

 

字典的常用操作

键、值、键值对

    1、dic.keys() 返回一个包含字典所有KEY的列表;
    2、dic.values() 返回一个包含字典所有value的列表;
    3、dic.items() 返回一个包含所有(键,值)元祖的列表;
    4、dic.iteritems()、dic.iterkeys()、dic.itervalues() 与它们对应的非迭代方法一样,不同的是它们返回一个迭代子,而不是一个列表;

  新增

    1、dic['new_key'] = 'new_value' 

    2、dic.setdefault(key, None) ,如果字典中不存在Key键,由 dic[key] = default 为它赋值;

  删除

    1、dic.pop(key[,default]) 和get方法相似。如果字典中存在key,删除并返回key对应的vuale;如果key不存在,且没有给出default的值,则引发keyerror异常;

    2、dic.clear() 删除字典中的所有项或元素;

  修改

    1、dic['key'] = 'new_value',如果key在字典中存在,'new_value'将会替代原来的value值。

    2、dic.update(dic2) 将字典dic2的键值对添加到字典dic中。

  查看

    1、dic['key'],返回字典中key对应的值,若key不存在字典中,则报错;

    2、adict.get(key, default = None) 返回字典中key对应的值,若key不存在字典中,则返回default的值(default默认为None);   


  len(dict):  计算字典元素个数,即键的总数。

  str(dict):  输出字典可打印的字符串。

  type(variable):  返回输入的变量类型,如果变量是字典就返回字典类型。

 

  # 通过一行语句创建一个这样的字典{1: 'alex', 2: 'alex', 3: 'alex'}?

  # 不能直接写 dic={1:'alex',2:'alex',3: 'alex'})

t = dict.fromkeys((1,2,3),'alex')

print(t)

集合

集合是无序的,不重复的数据集合,它里面的元素是可哈希的(不可变类型),但是集合本身是不可哈希(所以集合做不了字典的键)的。以下是集合最重要的两点:

  去重,把一个列表变成集合,就自动去重了。

  关系测试,测试两组数据之前的交集、差集、并集等关系。

1,集合的创建。

set1 = set({1,2,'barry'})
set2 = {1,2,'barry'}
print(set1,set2)  # {1, 2, 'barry'} {1, 2, 'barry'}
View Code

 

2,集合的增。

set1 = {
     'alex','wusir','ritian','egon','barry'}
set1.add('景女神')
print(set1)

#update:迭代着增加
set1.update('A')
print(set1)
set1.update('老师')
print(set1)
set1.update([1,2,3])
print(set1)
View Code

 

3,集合的删。

set1 = {
     'alex','wusir','ritian','egon','barry'}

set1.remove('alex')  # 删除一个元素
print(set1)

set1.pop()  # 随机删除一个元素
print(set1)

set1.clear()  # 清空集合
print(set1)

del set1  # 删除集合
print(set1)
View Code

 

4,集合的其他操作:

  4.1 交集。(&  或者 intersection)

set1 = {1,2,3,4,5}
set2 = {4,5,6,7,8}
print(set1 & set2)  # {4, 5}
print(set1.intersection(set2))  # {4, 5}

 

  4.2 并集。(| 或者 union)

set1 = {1,2,3,4,5}
set2 = {4,5,6,7,8}
print(set1 | set2)  # {1, 2, 3, 4, 5, 6, 7,8}

print(set2.union(set1))  # {1, 2, 3, 4, 5, 6, 7,8}

 

  4.3 差集。(- 或者 difference)

set1 = {1,2,3,4,5}
set2 = {4,5,6,7,8}
print(set1 - set2)  # {1, 2, 3}
print(set1.difference(set2))  # {1, 2, 3}

   4.4反交集。 (^ 或者 symmetric_difference)

set1 = {1,2,3,4,5}
set2 = {4,5,6,7,8}
print(set1 ^ set2)  # {1, 2, 3, 6, 7, 8}
print(set1.symmetric_difference(set2))  # {1, 2, 3, 6, 7, 8}

  4.5子集与超集

set1 = {1,2,3}
set2 = {1,2,3,4,5,6}

print(set1 < set2)
print(set1.issubset(set2))  # 这两个相同,都是说明set1是set2子集。

print(set2 > set1)
print(set2.issuperset(set1))  # 这两个相同,都是说明set2是set1超集。

 

5,frozenset不可变集合,让集合变成不可变类型。

s = frozenset('barry')
print(s,type(s))  # frozenset({'a', 'y', 'b', 'r'}) <class 'frozenset'>

三,基础数据类型的总结

按存储空间的占用分(从低到高)

数字
字符串
集合:无序,即无序存索引相关信息
元组:有序,需要存索引相关信息,不可变
列表:有序,需要存索引相关信息,可变,需要处理数据的增删改
字典:无序,需要存key与value映射的相关信息,可变,需要处理数据的增删改

按存值个数区分

标量/原子类型 数字,字符串
容器类型 列表,元组,字典

 

 

 

按可变不可变区分

可变 列表,字典
不可变 数字,字符串,元组,布尔值

 

 

 

按访问顺序区分

直接访问 数字
顺序访问(序列类型) 字符串,列表,元组
key值访问(映射类型) 字典

  

 

 

 

四,其他(for,enumerate,range)。

for循环:用户按照顺序循环可迭代对象的内容。

msg = '老男孩python是全国范围内最好的python培训机构'
for item in msg:
    print(item)

li = ['alex','银角','女神','egon','太白']
for i in li:
    print(i)

dic = {'name':'太白','age':18,'sex':'man'}
for k,v in dic.items():
    print(k,v)

enumerate:枚举,对于一个可迭代的(iterable)/可遍历的对象(如列表、字符串),enumerate将其组成一个索引序列,利用它可以同时获得索引和值。

li = ['alex','银角','女神','egon','太白']
for i in enumerate(li):
    print(i)
for index,name in enumerate(li,1):
    print(index,name)
for index, name in enumerate(li, 100):  # 起始位置默认是0,可更改
    print(index, name)    
 

range:指定范围,生成指定数字。

for i in range(1,10):
    print(i)

for i in range(1,10,2):  # 步长
    print(i)

for i in range(10,1,-2): # 反向步长
    print(i)

转载于:https://www.cnblogs.com/cheng-z/p/10023126.html

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_30470643/article/details/95596414

智能推荐

SpringBoot的异步调用介绍_weixin_30325071的博客-程序员宅基地

参考博客: https://www.cnblogs.com/jebysun/p/9675345.htmlhttps://blog.csdn.net/weixin_38399962/article/details/82146480何为异步调用说异步调用前,我们说说它对应的同步调用。通常开发过程中,一般上我们都是同步调用,即:程序按定义的顺序依次执行的过程,每一行代码执行过程必须等待上一行代码执行完毕...

创建进程 以写一个类继承Process的方式_做只早起的鸟儿的博客-程序员宅基地_processing类的继承

注意:1)创建的进程一定要继承Process类2) Process.init(self) :因为Process类本身也有__init___方法,这个子类相当于重写了这个方法。但这样会带来一个问题,我们并没有完成的初始化一个进程类,所以就不能使用这个类继承的一 些方法和属性。from multiprocessing import Processimport osfrom urllib...

Zabbix监控LVS状态及keepalived VIP漂移_weixin_33811961的博客-程序员宅基地

此文只说lvs监控,lvs+keepalived的部署,请参考我另外的文章。http://yangrong.blog.51cto.com/6945369/15759091、监控目标lvs的每秒会话连接数lvs的每秒包转发数lvs每秒转发带宽VIP切换情况keepalived进程的存活2、...

求解立方根JAVA实现_姜子牙在学习编程的博客-程序员宅基地_编程求立方根

package ut.org.demo.controller;public class HJ107求解立方根 {/** * 计算一个浮点数的立方根,不使用库函数。 * 保留一位小数。 * &lt;p&gt; * 数据范围: * &lt;p&gt; * 输入描述: * 待求解参数,为double类型(一个实数) * &lt;p&gt; * 输出描述: * 输入参数的立方根。保留一位小数。 * &lt;p&gt; * 示例1 * * @param args */public

SequenceFile合并小文件,读取大文件_兔子先生i的博客-程序员宅基地_sequencefile合并小文件

package com.zhiyou.bd23;import java.io.File;import java.io.FileInputStream;import java.io.FileReader;import java.io.IOException;import java.nio.charset.Charset;import java.util.ArrayList;impor...

php获取n个月前的时间戳_mikai0208的博客-程序员宅基地

当月起始时间戳:$begin_time = date("Y-m-d H:i:s",mktime(0, 0 , 0,date("m"),1,date("Y")));输出:2019-05-01 00:00:00上个月:$begin_time = date("Y-m-d H:i:s",mktime(0, 0 , 0,date("m")-1,1,date("Y")));输出:2019-0...

随便推点

html 绘制网络拓扑图,jTopo生成网络拓扑图_weixin_39770311的博客-程序员宅基地

$(document).ready(function(){functionnode(x, y, img){varnode= newJTopo.Node();node.setImage(‘./img/‘ +img,true);node.setLocation(x, y);scene.add(node);returnnode;}functionnode2(img){varnode= newJTopo...

tinder项目感言_weismanman的博客-程序员宅基地

细节决定性能 **以前总觉得android 项目很简单,总是手高眼底,总觉得只要后台把准确的数据给我了,android这边把数据解析对再显示一下就好了;现在想来太天真了; 幸运的是遇见两个android 算不上大牛,但基础很强的两个大哥;在这次tinder项目中大家交给我的功能很少,设置页面,聊天,配对页面,还有忘记密码,让我做的功能大多数他们已经封装好了,我只是调用一下就行;但是业务逻辑很不清晰

用DirectX实现魔方(三)视角变换及缩放(附源码)_weixin_33972649的博客-程序员宅基地

在本系列第一篇介绍过鼠标按键的功能,如下。左键拖拽 - 旋转魔方右键拖拽 - 变换视角滚轮 - 缩放魔方今天研究一下如何实现后面两个功能,用到的技术主要是Arcball,Arcball是实现Model-View-Camera的重要技术,这里的旋转基于Quaternion(四元数)来实现,当然也可以通过欧拉角来实现,但是欧拉角的旋转不够平滑。先看一下Model-View-Ca...

Myelipse怎么把项目的java版本从1.6改成1.7_qq_37591637的博客-程序员宅基地

由于jav的版本太低,tomcat的版本高了,两个不匹配。,所有项目上面有一个红叉;解决办法:右击项目-properties 如上图,就可以了; 

资料分享之Java学习就业培训视频_王亦玧的博客-程序员宅基地

复制这段内容后打开百度网盘App,操作更方便哦。 链接:https://pan.baidu.com/s/1ExLCtsbMTp3L6PgzWlYbAA 提取码:431e资料丰富,请移步链接