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

简介:

周二知识点比较零碎,主要包括第三方库的安装,PYC文件,数据类型,列表,字符串,数据运算,字典和set的使用。


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)
 
[ 2 2 3 999 23 999 22 21 999 ]


合并name2 到name里面

1
2
3
4
name.extend(name2)
print (name)
 
[ 'AA' 'jksf' , [ 2 99 5 ],  '234' 'klk' 'sdf' ]


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

1
2
3
4
5
>>>  print (name.sort())
 
Traceback (most recent call last):
   File  "<input>" , line  1 in  <module>
TypeError: unorderable types:  list () <  str ()


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

1
2
3
4
>>> name.pop( 2 )
print (name)
 
[ 'AA' 'jksf' , [ 2 99 5 ],  '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' , [ 2 99 5 ],  '234' ]
[ 'al' 'jksf' 'sdf' , [ 2 99 5 ],  '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' , [ 2 3 5 ],  '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  1 1
index of  3 1


字符串的操作


例如:去掉前后的空格

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

wKioL1mNVCbRd9KhAAB0fy99psE813.jpg



2、比较运算:

wKioL1mNVCeQ5O-4AABwK5DMe04209.jpg

3、赋值运算:

wKiom1mNVCaBftZMAAB1KhluNEc462.jpg

4、逻辑运算:

wKioL1mNVCigOjPEAABQ5iUPO0o773.jpg

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  35 in  <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' 32 234242423222222222 : { '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])





本文转自 beanxyz 51CTO博客,原文链接:http://blog.51cto.com/beanxyz/1835591,如需转载请自行联系原作者

目录
相关文章
|
18天前
|
数据采集 数据可视化 数据挖掘
利用Python自动化处理Excel数据:从基础到进阶####
本文旨在为读者提供一个全面的指南,通过Python编程语言实现Excel数据的自动化处理。无论你是初学者还是有经验的开发者,本文都将帮助你掌握Pandas和openpyxl这两个强大的库,从而提升数据处理的效率和准确性。我们将从环境设置开始,逐步深入到数据读取、清洗、分析和可视化等各个环节,最终实现一个实际的自动化项目案例。 ####
|
1天前
|
C语言 Python
[oeasy]python054_python有哪些关键字_keyword_list_列表_reserved_words
本文介绍了Python的关键字列表及其使用规则。通过回顾`hello world`示例,解释了Python中的标识符命名规则,并探讨了关键字如`if`、`for`、`in`等不能作为变量名的原因。最后,通过`import keyword`和`print(keyword.kwlist)`展示了Python的所有关键字,并总结了关键字不能用作标识符的规则。
20 9
|
9天前
|
数据挖掘 大数据 数据处理
python--列表list切分(超详细)
通过这些思维导图和分析说明表,您可以更直观地理解Python列表切分的概念、用法和实际应用。希望本文能帮助您更高效地使用Python进行数据处理和分析。
22 14
|
11天前
|
数据挖掘 大数据 数据处理
python--列表list切分(超详细)
通过这些思维导图和分析说明表,您可以更直观地理解Python列表切分的概念、用法和实际应用。希望本文能帮助您更高效地使用Python进行数据处理和分析。
28 10
|
16天前
|
数据采集 分布式计算 大数据
构建高效的数据管道:使用Python进行ETL任务
在数据驱动的世界中,高效地处理和移动数据是至关重要的。本文将引导你通过一个实际的Python ETL(提取、转换、加载)项目,从概念到实现。我们将探索如何设计一个灵活且可扩展的数据管道,确保数据的准确性和完整性。无论你是数据工程师、分析师还是任何对数据处理感兴趣的人,这篇文章都将成为你工具箱中的宝贵资源。
|
22天前
|
XML JSON API
如何使用Python将字典转换为XML
本文介绍了如何使用Python中的`xml.etree.ElementTree`库将字典数据结构转换为XML格式。通过定义递归函数处理字典到XML元素的转换,生成符合标准的XML文档,适用于与旧系统交互或需支持复杂文档结构的场景。示例代码展示了将一个简单字典转换为XML的具体实现过程。
16 1
|
28天前
|
数据处理 开发者 Python
Python中的列表推导式:简洁高效的数据处理
在编程世界中,效率和可读性是代码的两大支柱。Python语言以其独特的简洁性和强大的表达力,为开发者提供了众多优雅的解决方案,其中列表推导式便是一个闪耀的例子。本文将深入探讨列表推导式的使用场景、语法结构及其背后的执行逻辑,带你领略这一特性的魅力所在。
|
29天前
|
传感器 物联网 开发者
使用Python读取串行设备的温度数据
本文介绍了如何使用Python通过串行接口(如UART、RS-232或RS-485)读取温度传感器的数据。详细步骤包括硬件连接、安装`pyserial`库、配置串行端口、发送请求及解析响应等。适合嵌入式系统和物联网应用开发者参考。
45 3
|
29天前
|
JavaScript 前端开发 算法
python中的列表生成式和生成器
欢迎来到瑞雨溪的博客,这里是一位热爱JavaScript和Vue的大一学生的天地。通过自学前端技术2年半,现正向全栈开发迈进。如果你从我的文章中受益,欢迎关注,我将持续更新高质量内容,你的支持是我前进的动力!🎉🎉🎉
23 0
|
29天前
|
数据采集 JavaScript 程序员
探索CSDN博客数据:使用Python爬虫技术
本文介绍了如何利用Python的requests和pyquery库爬取CSDN博客数据,包括环境准备、代码解析及注意事项,适合初学者学习。
76 0
下一篇
DataWorks