文档章节

Python 学习- 列表,字符串,数据操作和字典

乐搏学院
 乐搏学院
发布于 2017/03/30 15:19
字数 2233
阅读 20
收藏 0

pip命令安装第三方库:

 

Python 导入库的时候,可以用import命令,如果是标准库,那么直接运行即可,如果是第三方的库,需要用pip命令安装之后才能导入。

例如

1

pip install pandas

 

os.system命令和 os.popen命令:

 

上一周学习了基本的os.system()命令,这个命令在windows下面同样工作。例如输出IP配置信息

1

2

>>>import os

>>>os.system("ipconfig")

如果希望保存到变量,可以

1

2

3

>>>import os

>>>r=os.popen("ipconfig").read()

>>>print(r)

 

Pyc文件:

当在一个Python文件中导入另外一个Python模块的时候,执行会自动生成一个PYC文件。这个文件是一个字节码文件。Python的工作原理是首先把源文件编译成pyc字节码文件,然后这个字节码文件再通过python的虚拟机执行。当手动运行python程序的时候,他不会在硬盘上保存对应的pyc文件,这是因为手动执行的频率一般而言不会太高,当下一次操作的时候,对应的内容可能有更改,因此没有保留的意义。而自动导入执行的时候,会自动创建对应的pyc文件。

 

数据类型:

int:整型, Python3以后不区分长整型和普通整型了

bool: 布尔型, True或者1为真;False或者0为假

字符串:注意下面例子的区别,他们的结果显示一样,不过+是创建了3个内存分区;而后者只用了1个,效率更高。

1

2

3

4

>>>name="yuan li"

>>>print("My name is "+ name+" and You?")

>>>print("My name is %s and You?" %name)

My name is yuan li and You?

 

列表:其他语言里面叫做数组,是使用最最广泛的数据结构

 

例子:

 

获取第一个元素

1

2

3

>>>name=["zhangsan","lisi","wangwu"]

>>>name[0]

'zhangsan'

 

获取最后一个元素

1

2

>>>name[-1]

'wangwu'

 

 

获取前第一个元素

1

2

>>>name[0:1]

['zhangsan']

 

 

获取倒数第2个元素

1

2

>>>name[-2:-1]

['lisi']

 

 

设置步长为2,隔一个取一个元素

1

2

>>>name[::2]

['zhangsan''wangwu']

 

 

切片,获取子列表的第三个元素

1

2

3

>>>name=["h","sjdkf",23,232,["22","33",234]]

>>>name[4][2]

234

 

 

指定索引位置,插入新元素

1

2

3

>>>name.insert(3,"hhhh")

>>>name

['h''sjdkf'23'hhhh'232, ['22''33'234]]

 

 

判断是否存在元素

1

2

3

4

5

6

7

8

9

10

>>>name

['jkjjljlj''sjdkf', ['22''33'234], 'end']

>>> 22 in name

False

>>> '22' in name

False

>>> 'end' in name

True

>>> '22' in name[2]

True

 

 

指定元素的值来删除 注意一次只能删除一个

1

2

3

>>> name.remove(23)

>>> name

['h''sjdkf''hhhh'232, ['22''33'234], 'end']

 

一次性删除多个连续的元素,可以使用del

1

2

3

>>> del name[2:4]

>>> name

['h''sjdkf', ['22''33'234], 'end']

 

修改某个位置的元素值

1

2

3

>>> name[0]='jkjjljlj'

>>> name

['jkjjljlj''sjdkf', ['22''33'234], 'end']

 

判断某元素个数

1

2

>>>name.count('22')

0

 

把所有的9都改成999

1

2

3

4

5

6

7

>>> name=[2,2,3,9,23,9,22,21,9]

for in range(name.count(9)):

    index=name.index(9)

    name[index]=999

print(name)

 

[223999239992221999]

 

合并name2 到name里面

1

2

3

4

name.extend(name2)

print(name)

 

['AA''jksf', [2995], '234''klk''sdf']

 

排序 注意混杂字符串和数字的列表在3里面不能排序,但是在2里面会按照ansc编码的值排序

1

2

3

4

5

>>> print(name.sort())

 

Traceback (most recent call last):

  File "<input>", line 1in <module>

TypeError: unorderable types: list() < str()

 

根据索引号删除,如果不指定索引号,默认删除最后一位

1

2

3

4

>>> name.pop(2)

print(name)

 

['AA''jksf', [2995], '234']

 

列表的复制,注意copy只能复制第一层的数据,里面嵌套的列表,仅仅复制了内存地址,换而言之,就是类似一个软连接,在源列表和复制后的列表里,如果修改嵌套的列表内的元素,两个表显示出来的效果都会同时变化。

1

2

3

4

5

6

7

8

9

>>> name=['al','jksf','sdf',[2,3,5],'234']

name3=name.copy()

name[0]='AA'

name[3][1]=99

print(name)

print(name3)

 

['AA''jksf''sdf', [2995], '234']

['al''jksf''sdf', [2995], '234']

 

 

如果想进行深度的复制,需要使用copy模块的deepcopy命令, 可以看见deepcopy之后他们是两个独立的个体,互相不受影响

1

2

3

4

5

6

7

8

9

>>> import copy

name=['al','jksf','sdf',[2,3,5],'234']

name4=copy.deepcopy(name)

name[3]='22222'

print(name)

print(name4)

 

['al''jksf''sdf''22222''234']

['al''jksf''sdf', [235], '234']

 

元组:tuple,只有只读属性的列表

用圆括号定义

1

2

>>> r=(1,3,4,5)

print(type(r))

因为只有只读属性,他的函数只有count和index两个

1

2

3

4

>>> print("count of 1:",r.count(1))

print("index of 3:",r.index(3))

count of 11

index of 31

 

字符串的操作

 

例如:去掉前后的空格

1

2

3

>>> user = " Yuan Li is a handsome man "

print(user.strip()) # remove space in the front and end

Yuan Li is a handsome man

 

用split分割字符串成为一个列表;用join合并列表成为一个字符串

1

2

3

4

5

6

>>> names="zhangsan, lisi, wanger"

name2=names.split(",")  #become list

print(name2)

print("|".join(name2))

['zhangsan'' lisi'' wanger']

zhangsan| lisi| wanger

 

指定索引输出

1

2

>>> print(names[0])

z

 

判断是否包括某个字符

1

2

>>> print(' ' in names)

True

 

大写首字母

1

2

>>> print(names.capitalize())

Zhangsan, lisi, wanger

 

两种方式传入参数

1

2

3

4

5

6

>>> msg="hello,{name}, it's been a long {time}"

msg2=msg.format(name='Yuan',time= 'period')

msg3="hhh{0},dddd{1}"

print(msg2)

print(msg3.format('Yuuu','222'))

hello,Yuan, it's been a long period

 

切片

1

2

3

>>> name="abcedefgh"

print(names[2:5])

ang

 

输出居中的格式center()

1

2

>>> print(name.center(40,'-'))

---------------abcedefgh----------------

 

find查找字符串中包含的字符,如果存在,返回索引,不存在返回-1

 

1

2

3

4

5

>>> name="abcedefgh"

print(name.find('e'))

print(name.find('dddd'))

3

-1

 

isdigit()判断输入的是否是数字

1

2

3

4

5

6

7

>>> age=input("your age:")

if age.isdigit():

    age=int(age)

else:

    print("invalid data type")

your age:>? er        

invalid data type

 

endwith()判断以什么结尾

1

2

3

>>> name="abcedefgh"

print(name.endswith("fgh"))

True

 

转换大小写

1

2

>>> print(name.upper())

ABCEDEFGH

 

数据运算

 

 

1、算数运算:a=10,b=20

2、比较运算:

3、赋值运算:

4、逻辑运算:

5、成员运算:

 

 

6、 二进制运算:

 

 

运算符 描述 解释
与运算 这个二进制位必须在2组数中都为真,结果才返回真
I    或运算 这个二进制位只需在其中一组数据中为真即返回真
异或运算 只要这个二进制位在两组数据中不相同就返回
<<  左移运算 移动一位相当于乘以2
>>  右移运算 移动一位相当于除以2

 

 

字典:无序,Key和value配对,key值唯一

例子:定义一个嵌套的字典

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

id_db={

    23432424234234324:{

        'name':"alex",

        'age':23,

        'addr':'Shandong'

    },

    234324324234324242:{

        'name':'Yuan',

        'age':24,

        'addr':'Sichuan'

    },

    234242423222222222:{

        'name':'john',

        'age':20,

        'addr':'HeNan'

    }

}


指定Key,输出对应的Value

1

2

print(id_db[234242423222222222])

{'name''john''age'20'addr''HeNan'}

 

更改一个Key的值

1

2

3

id_db[234242423222222222]['name']='hhh'

print(id_db[234242423222222222])

{'name''hhh''age'20'addr''HeNan'}

 

添加一个新的key/value 元素

1

2

3

id_db[234242423222222222]['qq']=2900032

print(id_db[234242423222222222])

{'name''john''age'20'qq'2900032'addr''HeNan'}


删除一个元素

1

2

del id_db[234242423222222222]['qq']

print(id_db[234242423222222222])

 

另外一种删除的方式

1

2

id_db[234242423222222222].pop('age')

print(id_db[234242423222222222])

 

get,如果该Key存在,返回对应的值

1

2

3

v=id_db.get(234242423222222222)

print(v)

{'name''john''age'20'addr''HeNan'}

如果不存在,返回None

1

2

3

v=id_db.get(22222)

print(v)

None

 

注意,如果使用直接赋值的方式,如果不存在,它会直接抛出一个错误。

 

1

2

3

4

5

v=id_db[22222]

print(v)

Traceback (most recent call last):

  File "<input>", line 35in <module>

KeyError: 22222

 

 

把一个新的字典加入当前的字典

 

1

2

3

4

5

6

dic2={'name':'kkkk',

      'age':32,

      'addr':'Hongkong'}

id_db.update(dic2)

print(id_db)

{234324324234324242: {'name''Yuan''age'24'addr''Sichuan'}, 23432424234234324: {'name''alex''age'23'addr''Shandong'}, 'addr''Hongkong''name''kkkk''age'32234242423222222222: {'name''john''age'20'addr''HeNan'}}

 

直接输出,不建议使用,效率低

1

print(id_db.items())

 

分别输出Key和Value

1

2

print(id_db.values())

print(id_db.keys())

 

判断是否存某个Key

1

print(234242423222222222 in id_db)

 

判断这个key是否存在,如果存在,返回value;如果不存在,创建这个key和对应的value,如果不设置value,那么默认为None

1

2

print(id_db.setdefault(234242423222222222))#if exists, erturn the value

print(id_db.setdefault(234242423222222122222222,'hhhh'))#otherwise add a new key/value

 

创建一个新的字典,把列表里面的每一个值拿出来作为key,然后后面的分配同样的值

1

2

print(id_db.fromkeys([1,2,3,3],'ddd'))

{1'ddd'2'ddd'3'ddd'}

 

随机的删除一项

1

print(id_db.popitem())

 

输出字典的Key和Value,有两种方式,第一种方式适合比较小的字典,效率低;第二种效率比较高

1

2

3

4

for k,v in id_db.items():

    print(k,v)

for key in id_db:

    print(key,id_db[key])

 

登录乐搏学院官网http://www.learnbo.com/

或关注我们的官方微博微信,还有更多惊喜哦~

本文出自 “麻婆豆腐” 博客,请务必保留此出处http://beanxyz.blog.51cto.com/5570417/1835591

© 著作权归作者所有

乐搏学院
粉丝 9
博文 526
码字总数 707467
作品 0
丰台
程序员
私信 提问
Python 入门之基本数据类型

为什么我要学习Python这门语言呢?其实很简单,我想拓展技术面的同时,尝试更多的方向,可能最后会不了了之,谁知道呢?有可能的话,我会向爬虫和数据分析这个方向走。所以也就开始了我的Pyt...

YJK923
2018/08/17
0
0
Python基础总结成千行代码,让Python入门更简单!

只要学会这千行代码,不管你是零基础还是弱基础或是没有接触过编程,都可以快速入门Python!当时我就不信邪啊,等我看完之后,即使作为一个Python老鸟了,还是领会到了很多教授他的独特见解!...

糖宝lsh
2018/09/10
233
0
Python3基础之学习笔记(三)-模块-pyc-数据类型-列表-元组-字典-集合-字符串

文章目录 1 模块 2 pyc 3 数据类型 4 三元运算符 5 Bytes 6 列表 7 元组 8 字典 9 集合 10 字符串 1 模块 1.1 sys模块 sys.path存储模块搜索路径,当导入模块时,先在当前目录下查找模块,如...

GoldenKitten
01/15
0
0
Python学习系列入门篇(二)

这些天忙的不可开交,今天终于想起来继续写,工欲善其事必先利其器,得找个markdown编辑器用一下,windows找了个破解版的(主要是可以传图片),使用起来还不错,支持实时预览,就用它了,首...

疑似一僧
2014/03/17
106
0
人生苦短:Python里的17个“超赞操作

人生苦短,我选Python”。那么,你真的掌握了Python吗? 1. 交换变量 有时候,当我们要交换两个变量的值时,一种常规的方法是创建一个临时变量,然后用它来进行交换。比如: # 输入 a = 5 b ...

糖宝lsh
2018/08/17
73
0

没有更多内容

加载失败,请刷新页面

加载更多

关于ThinkPHP5.1+的Log无法记录SQL调试记录的小经历

项目开发阶段,除了基本编码外,性能也需要实时关注与优化。之前我的大部分项目都是使用ThinkPHP5.0以及ThinkPHP3.2,对于框架提供的日志记录和日志配置都差不多,然后使用ThinkPHP5.1的时候...

北桥苏
22分钟前
1
0
TiDB Binlog 源码阅读系列文章(四)Pump server 介绍

作者: satoru 在 上篇文章 中,我们介绍了 TiDB 如何通过 Pump client 将 binlog 发往 Pump,本文将继续介绍 Pump server 的实现,对应的源码主要集中在 TiDB Binlog 仓库的 pump/server.go...

TiDB
25分钟前
0
0
OSChina 周五乱弹 ——不知道假装开心,装的像么

Osc乱弹歌单(2019)请戳(这里) 【今日歌曲】 @巴拉迪维 :天黑了 你很忧愁, 你说世界上, 找不到四块五的妞, 行走在凌晨两点的马路上, 你疲倦地拿着半盒黄鹤楼。#今日歌曲推荐# 《四块...

小小编辑
今天
2.4K
19
Windows下学习C语言有哪些集成开发软件?

前言 初学者学习C语言遇到的最大困难想必就是搭建环境了,相当多的初学者就是被搭建环境导致放弃了学习编程,就我自己的经验而言,初学编程不应该受限于环境,使用成熟好用的环境就可以了,之...

Allen5G
昨天
2
0
Hello,Servlet!

Servlet来源 上文说过了servlet是什么,我们从servlet是什么中也可以了解到servlet的来源:servlet是Java的一个类,并且能够运行在web容器上,所以servlet是按照web容器的规范和Java的规范写...

蒙尘
昨天
2
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部