Python--列表-,元组,字典的介绍

补充1

关于字符串切片,就是取出字符串中的单个字符

s='hello world'
print(s[0]) 根据字符的索引值,来取出单个字符,从0 开始,
print(s[1])
print(s[0:5]) 指定范围取值,从0到5的值,取头不取尾,
print(s[0:5:2])在0到5的范围内,按照步长2取值,没个一个字符取一个值,
结果为
h
e
hello
hlo
--------------------------------------------------------------------
补充2

变量的解压
s='hello'
a,b,c,d,e=s 把每个单个字符都绑定一个变量
print(a,b,c,d,e)
print(b) 如果支取某个,就指定那个变量名,
结果
h e l l o
e

-------------------------------------------------------------------------
补充3
关于for和while循环
需要涉及到break和continue的区别了。

break: 只能跳出当前循环,当前这一套循环就结束了。
continue: 跳出当次循环,然后呢还会去继续下一次别的循环。

for循环
for i in range(10):
print(i)
结果
0
1
2
3
4
5
6
7
8
9
从0到9 一次循环打印,直到9结束
for i in range(0,10,3):
print(i)
0
3
6
9
指定步长为3,打印,每隔3个
列表
1.定义:[]内以逗号分隔,按照索引,存放各种数据类型,每个位置代表一个元素
特性:
1.可存放多个值
2.可修改指定索引位置对应的值,可变
3.
按照从左到右的顺序定义列表元素,下标从0开始顺序访问,有序

关于表格的创建的3种方式:
list_1=[1,2,3]

list_test=list('abc')
print(list_test)

list_test=list(['lhf',12,'ok'])
print(list_test)

2. 列表的常用操作
索引
切片
追加
删除
长度
循环
包含
--------------------------------------------------------------------------------------------------------
列表元素去重
n1=['a','b',1,2,1]
n2=[]
for i in n1 :
if i not in n1 :
n2.append(i)
print(n2)


list_1=list(set(n1))
list_1.sort(key=n1.index) --------------sort是排序,根据n1的列表排序
print(list_1)
-----------------------------------------------------------------------------------------------------------
1.1切片,,根据索引值求值
name=['alex','egon',1 ,[3,4]]
print(name[0]) 索引0的位置的值
print(name[0:2]) 从0到2的值
print(name[0:3:2]) 步长为2的,每隔一个数求值
结果
alex
['alex', 'egon']
['alex', 1]
-----------------------------------------------------------------------------
2.追加
name=['alex','egon',1 ,[3,4]]
name.append('ccc')
print(name) -------------------------从列表的最后开始追加
结果
['alex', 'egon', 1, [3, 4], 'ccc']
-----------------------------------------------------------------------------
3.插入
name=['alex','egon',1 ,[3,4]]
name.insert(1,'ddddd')
print(name)
---------------------插入,指定一个索引,插入到索引值前
结果
['alex', 'ddddd', 'egon', 1, [3, 4]]
------------------------------------------------------------------------------
4.删除
name=['alex','egon',1 ,[3,4]]
name.pop()
print(name) --------如果不加参数,从列表的最后一个值开始删除,
结果
['alex', 'egon', 1]

name=['alex','egon',1 ,[3,4]]
name.pop(1)-------------------指定一个索引,删除索引位置的值
print(name)
结果
['alex', 1, [3, 4]]
----------------------------------------------------------------------------------
5.关于队列和堆栈
队列---先进先出
堆栈---先进后出

队列

先进1
append 的追加方式,默认从最后加
a=[]
a.append('p1')
a.append('p2')
a.append('p3')
print(a)


结果-------['p1', 'p2', 'p3']-----先进来得,排在最前面

先进2
insert 的追加方式,需要指定索引位置

a=[]
a.insert(0,'p1')
a.insert(1,'p2')
a.insert(2,'p3')
print(a)


先出
a=['p1', 'p2', 'p3']
a.pop(0) ---指定0的索引位置弹出 p1弹出
a.pop(1) ---指定1的索引位置弹出 p2弹出
a.pop(2) ---指定2的索引位置弹出 p3弹出
print(a)
--------------------------------------------------
堆栈
先进后出
append 追加
pop 弹出,不加参数,默认从列表的最后弹出,
-------------------------------------------------------------------
5.del 删除 列表元素
a=['p1', 'p2', 'p3']
del a[1]
print(a)
结果----['p1', 'p3']   -------del 的删除列表的格式,del a[1],del后面加上列表名字,跟上索引位置
---------------------------------------------------------------------------------------------
6.列表长度
a=['p1', 'p2', 'p3']
print(len(a))
结果   3  ,
---------------------------------------------------------------------------------------------
7.成员运算
in ,判断元素是否在列表里
a=['p1', 'p2', 'p3']
print('p4' in a )

结果 False -----p4不在a的列表里,

关于字符串里,单个字符的判断
v='dfdfdf'
print('f' in v)
--------判断f 是否在字符串v内,在,返回Ture,
-------------------------------------------------------------------------------
8.求出列表内某个元素的索引值
a=['p1', 'p2', 'p3']
print(a.index('p2'))
----返回 1
-----------------------------------------------------------------------------
9.计算列表里某个元素数量
a=['p1', 'p2', 'p3','p3']
print(a.count('p3'))
-----------返回2 ,2各p3
----------------------------------------------------------------------------------
10.加入新的列表
a=['p1', 'p2', 'p3','p3']
a.extend([1,2,3])
print(a)

结果 ['p1', 'p2', 'p3', 'p3', 1, 2, 3] ----extend是把新表里的每个元素加到原来的列表里
-------------------------------------------------------------------------------------
11.append,追加
a=['p1', 'p2', 'p3','p3']
a.append([1,2,3])
print(a)
结果 ['p1', 'p2', 'p3', 'p3', [1, 2, 3]],,append是把整个列表加到原来的列表里,整体作为列表的一个元素
------------------------------------------------------------------------------------------------------------------
12.指定删除 remove
a=['p1', 'p2', 'p3','p3']
a.remove('p1')
print(a) ------指定删除某个元素
13.排序 sort
a=['p1', 'p6', 'p9','p3']
a.sort()
print(a) -------从小到大排序,,,

a=['p1', 'p6', 'p9','p3']
a.sort(reverse=True) reverse是反转的意思
print(a)
------从大到小排序
---------------------------------------------------------------------
13.按原来的列表倒着排序

a=['p1', 'p6', 'p9','p3']
a.reverse()
print(a)
结果['p3', 'p9', 'p6', 'p1']
------------------------------------------------------------------------------------------
14.清空列表 clear
a=['p1', 'p6', 'p9','p3']
a.clear()
print(a)
结果 [] 清空列表,,
-------------------------------------------------------------------------------------
15.遍历出列表的每个元素
a=['p1', 'p6', 'p9','p3']
for i in range(len(a)) :
print(a[i])


结果--
p1
p6
p9
p3



元组的操作

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

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

元组常用操作

索引
切片
循环
长度
包含

1.计算元组里的每个元素个数 count
t=('p1', 'p6', 'p9','p3')
print(t.count('p9'))
---结果 为1 ,代表只有1个p9元素,
--------------------------------------------------------------
2.输出值的索引 index
t=('p1', 'p6', 'p9','p3')
print(t.index('p9'))
---结果 2 代表p9的索引为2,
-----------------------------------------------------------------
3.元组的元素输出,切片  
t=('p1', 'p6', 'p9','p3')
print(t[1])
print(t[3]) ----利用索引,

指定范围取值
t=('p1', 'p6', 'p9','p3')
print(t[1:3]) ---利用索引,也可以指定步长
print(t[3])
结果
('p6',)
p3
---------------------------------------------------------------------
4.求出元组的长度, 确定元素是否在元组内
t=('p1', 'p6', 'p9','p3')
print(len(t)) ---输出元组长度
print('p1' in t) ---身份确认
结果
4
True

----------------------------------------------------------------------------
5.关于元组元素的改动 ,元素里的列表元素可以改动,其他的都不能动
t=('p1', 'p6', 'p9','p3',[1,2])
t[4][0]=('a') -------------指定元组里列表的元素改为‘a’,是可以改的,其他不能改动,否则报错
print(t)
结果('p1', 'p6', 'p9', 'p3', ['a', 2])
--------------------------------------------------------------------------------


字典

dict={'key1':'value','key2':'value2'}
print(dict)
结果
{'key1': 'value', 'key2': 'value2'}
字典的有key,和value 组成,两者一一对应,
key必须是不可变的,是hash类型,数字,元组,字符串是可以作为key的,
value是可变的,

可以用hash()的方法,判断哪些可以作为key
print(hash('a'))
print(hash(2))
t=(1,2,3)
print(hash(t))


结果 ------不报错,都可以用作字典的key,
7486283456454968218
2
2528502973977326415
----------------------------------------------------------------------------------------------
字典没有索引,是无序的,通过key来取值,
1.通过key改值value
dict={'key1':'value','key2':'value2'}
dict['key1']='value3' ----------通过key1的建,赋给新的值value3,
print(dict)
结果
{'key1': 'value3', 'key2': 'value2'}
-------------------------------------------------------------------------------------------------
2.输出字典的key
dict={'key1':'value','key2':'value2'}

print(dict.keys())
结果 dict_keys(['key1', 'key2'])---不是列表
-----------------------------------------------------------------------------------
3.输出字典的value
dict={'key1':'value','key2':'value2'}

print(dict.values())
结果:dict_values(['value', 'value2'])--不是列表
--------------------------------------------------------------------------------------
4.遍历出字典的key 键,value,值,---------不通过索引的方式,输出key 和value
dict={'key1':'value','key2':'value2'}

for i in dict :
print(i,dict[i])
结果
key1 value
key2 value2
----------------------------------------------------------------------
5.get的使用
dict={'key1':'value','key2':'value2'}

print(dict.get('b')) ----即使‘b’不在dict的字典里用get的方法也不会报错
结果 None

如果不用get
dict={'key1':'value','key2':'value2'}

print(dict.('b'))
 
结果 直接报错
print(dict.('b'))
               ^
SyntaxError: invalid syntax
-----------------------------------------------------------------

总结
for,循环,对有索引的,有序的,可以遍历每个元素,适合列表,元组,字符串,

字典的查询速度快,没有索引,通过key,直接找到value,字典里存放的就是hash表,

比较容器类型
10000个用户信息,存在不同的类型容器里,查询速度,占用的内存空间是不一样的,
列表:通过索引取值,索引存放在内存里,没增加一个值,就扩大内存,
元组:不可变的,更省空间,
字典:字典里的hash表,比列表还大,但优化了查询速度,不用找无用的值,直接找 key ,
-----------------------------------------------------------------
字典的嵌套
 
 
-----------------------------------------------------------------------
关于布尔值
True False
每个数据类型都自带布尔值,0,None,空,为 False,其余都是True ,
while 1 :              ---1 为True.
cmd = input('>>: ')
if not cmd : ---cmd 输入为空,就是什么都不输入,直接回车,就是False ,not cmd 就是真,就继续输入,如果输入
continue
print('ok')

------------------------------------------------------------------------------------------------------------
集合

定义:由不同元素组成的集合,集合中是一组无序排列的可hash值,可以作为字典的key
特性:
1.集合的目的是将不同的值存放到一起,不同的集合间用来做关系运算,无需纠结于集合中单个值
取连个列表中相同的值

l1=[1,2,3,4]
l2=[1,5,6,3]
l3=[]
for i in l1 :
if i in l2 :
l3.append(i)
print(l3)
结果
[1, 3] ----------这是在做关系运算,

集合的作用就是做关系运算,两个集合之间的关系运算
set 集合,包含的元素没有重复的,,元素必须是不可变的,元组可以,列表不行,
集合也是无序的, 没有可以,没有索引
集合不能取值,
只能做两个集合之间的运算,没有取单个值的需求,可以用for循环遍历每个元素,

------
集合的关系运算
1.交集
s1={'alex',1,'a',2,'b'}
s2={1,'a',3,'b'}
print(s1 & s2)
结果
{1, 'a', 'b'}

2.求两个集合的所有元素,并集
s1={'alex',1,'a',2,'b'}
s2={1,'a',3,'b'}
print(s1 | s2) ------用 | 表示
结果
{1, 2, 'alex', 'b', 3, 'a'} ---去掉重复的部分的所有

3.输出s1不包含在s2的值,,反之,s2-s1,
s1={'alex',1,'a',2,'b'}
s2={1,'a',3,'b'}
print(s1 - s2) ---减去相同的部分
结果
{2, 'alex'}
4.对称差集,两个集合自己独有的值,
s1={'alex',1,'a',2,'b'}
s2={1,'a',3,'b'}
print(s1 ^ s2) -------- ^ 上肩号,在连个集合里都没有重复的值
结果{2, 3, 'alex'}
----------------------------------------------------------------------

用方法调用:
1.s1集合中没有s2 的值,相当于 s1 - s2
s1
={'alex',1,'a',2,'b'}
s2={1,'a',3,'b'}
print(s1.difference(s2))
结果
{2, 'alex'}
2. 交集
s1={'alex',1,'a',2,'b'}
s2={1,'a',3,'b'}
print(s1.intersection(s2))
结果
'b', 1, 'a'}
3.并集
s1={'alex',1,'a',2,'b'}
s2={1,'a',3,'b'}
print(s1.union(s2))
3.对称差集 ,除去两者集合相同的部分
s1={'alex',1,'a',2,'b'}
s2={1,'a',3,'b'}
print(s1.symmetric_difference(s2))
结果
{2, 3, 'alex'}
---------------------------------------------------------------------------
5.把s1的值并给s2, updata
s1={'alex',1,2}
s2={1,'a','b'}
s1.update(s2)
print(s1) -----{1, 2, 'b', 'a', 'alex'} s2还是存在的
------------------------------------------------------------------------
6.添加元素 add
s1={'alex',1,2}
s2={1,'a','b'}
s1.add('aa')
print(s1) ----{1, 2, 'alex', 'aa'}
------------------------------------------------------------------------------
7. 删除集合元素 discard
s1={'alex',1,2}
s2={1,'a','b'}
s1.discard(2) -----------指定删除的元素 ,,如果删除集合里没有的,是不会报错的
print(s1) ---------{1, 'alex'}
---------------------------------------------
8.删除集合元素 remove
s1={'alex',1,2}
s2={1,'a','b'}
s1.discard(3) ------------指定删除,如果删除集合里没有的,会报错
print(s1)
-------------------------------------------------
9.删除集合元素 pop
s1={'alex',1,2}
s2={1,'a','b'}
s1.pop() ---- 不能指定元素,随机删除元素,有返回值
print(s1)
------------------------------------------------------------------
10. issubset,确定是否值子集
issupperset .确定是否是超级父集
isdijoint ,确定是否有交集

---------------------------------------------------------------------
11.关于字符串格式化

res="name%s" %'egon'
name的位置可以添加任意内容,
%s 可以跟数字和字符串
%d 只能跟数字
 
 

---------------------------------------------------------------------------


---------------------------------------------------------------------------------
posted @ 2017-06-12 14:40  谷子的  阅读(391)  评论(0编辑  收藏  举报