《数据分析Python基础——pycharm第三天》

1.可变字符串

确实需要原地修改字符串:io.StringIO

>>> import io
>>> s='hello,sxt'
>>> sio=io.StringIO(s)
>>> sio
<_io.StringIO object at 0x0000017E672B0D30>
>>> sio.getvalue()
'hello,sxt'
>>> sid.seek(6)

>>> sio.write('g')
1

>>> sio.getvalue()
'hello,gxt'

2.列表简介

Python中一切皆对象

《数据分析Python基础——pycharm第三天》_第1张图片

Python中列表大小可变,可以随时根据需要变大缩小

字符串和列表都是序列类型。字符串是一个字符序列,列表是任何元素的序列

3.列表的创建

a=[]

 >>> a=[]
>>> a.append(20)
>>> a
[20]
>>> a=list()
>>> a=list('gaoqi')
>>> a
['g', 'a', 'o', 'q', 'i']
>>> a=range(15)
>>> a
range(0, 15)
>>> list(a)
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14]
list可以把迭代的数据转化为列表

4.range()创建整数列表

《数据分析Python基础——pycharm第三天》_第2张图片

 >>> list(range(13,-3,-2))
[13, 11, 9, 7, 5, 3, 1, -1]
>>> list(range(2,15,3))
[2, 5, 8, 11, 14]

5.推导式生成列表

>>> a=[x*2 for x in range(5)]
>>> a
[0, 2, 4, 6, 8]

>>> a=[x*2 for x in range(100)if x%9==0]#通过if过滤元素
>>> a
[0, 18, 36, 54, 72, 90, 108, 126, 144, 162, 180, 198]

6.列表元素的增加和删除

尽量在列表的尾部添加和删除

append()方法,真正在尾部添加,推荐

>>> a=[20,30,40]
>>> a
[20, 30, 40]
>>> a.append(111)
>>> a
[20, 30, 40, 111]

+运算符操作

不是真正在尾部添加,而是创建新对象

>>> a
[20, 30, 40]
>>> a.append(111)
>>> a
[20, 30, 40, 111]
>>> id(a)
1642408415040
>>> a.append(50)
>>> a
[20, 30, 40, 111, 50]
>>> id(a)
1642408415040
>>> a=a+[60]
>>> id(a)
1642367565632

会彻底产生一个新对象

extend()方法

>>> a=[20,30,40]
>>> id(a)
1642408591488
>>> a.extend([50,60])
>>> id(a)
1642408591488
>>> a
[20, 30, 40, 50, 60]

insert()方法

本质上是列表的COPY

后面的元素依次往后挪

>>> a=[20,30,40]
>>> id(a)
1642408414656
>>> a.insert(2,5)
>>> a
[20, 30, 5, 40]
>>> id(a)
1642408414656

>>> a.insert(2,'xyz')
>>> a
[20, 30, 'xyz', 5, 40]

乘法拓展

>>> a
[20, 30, 'xyz', 5, 40]
>>> b=a*3
>>> b
[20, 30, 'xyz', 5, 40, 20, 30, 'xyz', 5, 40, 20, 30, 'xyz', 5, 40]
 

列表元素的删除

本质上是列表的COPY

后面的元素依次往前挪

>>> a
[20, 30, 5, 40]
>>> id(a)
1642408414656
>>> del a[1]
>>> a
[20, 5, 40]
>>> id(a)
1642408414656

《数据分析Python基础——pycharm第三天》_第3张图片

同insert()和del(),尽量不要在中间放入或删除

pop()方法

删除指定元素,并把该元素调出

默认弹出最后一个元素

>>> a=[10,20,30,40,50,60,70]
>>> a.pop()
70
>>> a
[10, 20, 30, 40, 50, 60]
>>> b=a.pop(2)
>>> b
30
>>> a
[10, 20, 40, 50, 60]

remove()方法

删除首次出现的指定元素,对元素进行操作

如没有这个元素,则报错

>>> a=[10,20,30,40,50,60,70,20,40,20]
>>> a=['aa','bb','cc','dd','aa','dd','ee','ff']
>>> a.remove('bb')
>>> a
['aa', 'cc', 'dd', 'aa', 'dd', 'ee', 'ff']
>>> a.remove('gg')
Traceback (most recent call last):
  File "", line 1, in
    a.remove('gg')
ValueError: list.remove(x): x not in list

 7.列表元素访问和计数

通过索引直接访问元素

index()获得指定元素在列表中首次出现的索引

>>> a
['aa', 'cc', 'dd', 'aa', 'dd', 'ee', 'ff']
>>> a.index('cc')
1
>>> a.index('aa',3)
3

count()指定元素出现的次数

>>> a
['aa', 'cc', 'dd', 'aa', 'dd', 'ee', 'ff']

>>> a.count('dd')
2

len()返回列表的长度

>>> len(a)
7

成员资格的判断

判断列表中是否包含指定的元素

['aa', 'cc', 'dd', 'aa', 'dd', 'ee', 'ff']
>>> 'ff' in a
True
>>> 'gg' in a
False

8.slice切片操作

 9.列表的遍历

>>> a=[10,20,30,40,50,60,70,20,40,20]
>>> a
[10, 20, 30, 40, 50, 60, 70, 20, 40, 20]


>>> for x in a:
    print(a)#对a打印,而对x打印则是所有元素竖着排

[10, 20, 30, 40, 50, 60, 70, 20, 40, 20]
[10, 20, 30, 40, 50, 60, 70, 20, 40, 20]
[10, 20, 30, 40, 50, 60, 70, 20, 40, 20]
[10, 20, 30, 40, 50, 60, 70, 20, 40, 20]
[10, 20, 30, 40, 50, 60, 70, 20, 40, 20]
[10, 20, 30, 40, 50, 60, 70, 20, 40, 20]
[10, 20, 30, 40, 50, 60, 70, 20, 40, 20]
[10, 20, 30, 40, 50, 60, 70, 20, 40, 20]
[10, 20, 30, 40, 50, 60, 70, 20, 40, 20]
[10, 20, 30, 40, 50, 60, 70, 20, 40, 20]
>>> 
 

10.复制所有列表元素到新对象

《数据分析Python基础——pycharm第三天》_第4张图片

11.列表的排序

修改原列表,而不是生成新列表

>>> a.sort()
>>> a
[10, 20, 20, 20, 30, 40, 40, 50, 60, 70]
>>> a.sort(reversed=True)
Traceback (most recent call last):
  File "", line 1, in
    a.sort(reversed=True)
TypeError: 'reversed' is an invalid keyword argument for sort()
>>> a.sort(reverse=True)
>>> a
[70, 60, 50, 40, 40, 30, 20, 20, 20, 10]

注意参数时,reverse 和reversed是不一样的

随机

>>> a=[10,20,30,40,50,20,13]
>>> a.sort()
>>> a
[10, 13, 20, 20, 30, 40, 50]
>>> a.sort(reverse=True)
>>> a
[50, 40, 30, 20, 20, 13, 10]
>>> import random
>>> random.shuffle(a)
>>> a
[30, 10, 20, 50, 40, 13, 20]

建新列表的排序

>>> a
[30, 10, 20, 50, 40, 13, 20]
>>> id(a)
2308659343552
>>> a.sorted()
Traceback (most recent call last):
  File "", line 1, in
    a.sorted()
AttributeError: 'list' object has no attribute 'sorted'
>>> a=sorted(a)
>>> a
[10, 13, 20, 20, 30, 40, 50]
>>> id(a)
2308651178752

reversed()返回迭代器

>>> a[::-1]
[50, 40, 30, 20, 20, 13, 10]
>>> c=reversed(a)
>>> list(c)
[50, 40, 30, 20, 20, 13, 10]
>>> list(c)
[]

迭代器只能用一次

max  和min、sum

>>> max(a)
50
>>> min(a)
10

>>> sum(a)#会对非数值列表会报错
183

12.多维列表

二维列表

也就是列表套列表

TypeError: list indices must be integers or slices, not tuple
>>> a=[
    ['高小一',18,30000,'北京'],
    ['高小二',19,40000,'上海'],
    ['高小三',20,50000,'深圳']
    ]
>>> a
[['高小一', 18, 30000, '北京'], ['高小二', 19, 40000, '上海'], ['高小三', 20, 50000, '深圳']]
>>> a[0][3]
'北京'
>>> 

嵌套循环

>>> a=[
    ['高小一',18,30000,'北京'],
    ['高小二',19,40000,'上海'],
    ['高小三',20,50000,'深圳']
    ]
>>> a
[['高小一', 18, 30000, '北京'], ['高小二', 19, 40000, '上海'], ['高小三', 20, 50000, '深圳']]
>>> a[0][3]
'北京'
>>> for m in range(3):
    for n in range(4):
        print(a[m][n],end='\t')
    print()

    
高小一    18    30000    北京    
高小二    19    40000    上海    
高小三    20    50000    深圳    

13.元组

同列表,但区别就是不可增删改(知新而温故)

《数据分析Python基础——pycharm第三天》_第5张图片

14.元组的创建

tuple()~~~~~vs.~~~list() 

tuple(可迭代对象)

>>> b=tuple('abcd')
>>> b
('a', 'b', 'c', 'd')
>>> b=tuple(range(4))
>>> b
(0, 1, 2, 3)

 >>> a=(10,20,30)
>>> a
(10, 20, 30)
>>> type(a)

>>> a=10,20,30
>>> type(a)

元组对象排序时,只能用内置函数sorted(tupleObj),并生成新的对象

也就是说元组不能增删改,只能用函数,变成新对象

>>> a=1,20
>>> b=30,30,50
>>> a+b
(1, 20, 30, 30, 50)
>>> a
(1, 20)
>>> len(a)
2
>>> max(b)
50

15.zip

>>> a=[10.20,30]
>>> b=[40,50,60]
>>> c=[70,80,90]
>>> d=zip(a,b,c)
>>> d
#形成一个zip对象
>>> list(d)
[(10.2, 40, 70), (30, 50, 80)]

>>> a=[10,20,30]
>>> d1=zip(a,b,c)
>>> d1

>>> list(d1)
[(10, 40, 70), (20, 50, 80), (30, 60, 90)]#发现规律,以第一个列表的长度为标准

16.生成器推导式创建元组

生成器理解为指针,用完一次就没有了,或者是一次一次往下走

>>> s=(x*2 for x in range(5))
>>> s
at 0x0000023931EB77B0>
>>> tuple(s)
(0, 2, 4, 6, 8)
>>> tuple(s)
()
>>> s=(x*2 for x in range(5))
>>> s._next_()
Traceback (most recent call last):
  File "", line 1, in
    s._next_()
AttributeError: 'generator' object has no attribute '_next_'

##是双下划线
>>> s=(x*2 for x in range(5))
>>> s.__next__()
0
>>> s.__next__()
2
>>> s.__next__()
4

17.元组的总结 

《数据分析Python基础——pycharm第三天》_第6张图片

18.字典

“键值对”的无序可变序列

成对存储;

通过键去操作值

类比:列表a[0]和a['name']

底层逻辑是一样的,字典也是数组

19.字典的创建

用{},dict()创建字典对象

>>> a={'name':'gaoqi','age':18,'dd':[2,3,4]}#用{}来创建
>>> a
{'name': 'gaoqi', 'age': 18, 'dd': [2, 3, 4]}
>>> b=dict(name='gaoqi',age=13)#用dict()函数来创建方式一
>>> b
{'name': 'gaoqi', 'age': 13}
>>> b=[('name','age'),('gaoqi',18)]#用dict()函数来创建方式二
>>> b
[('name', 'age'), ('gaoqi', 18)]

用zip()创建字典对象

>>> k=['name','age','c']
>>> v=['gaoqi',18,[333]]
>>> d=dict(zip(k,v))
>>> d
{'name': 'gaoqi', 'age': 18, 'c': [333]}

zip函数将数组变成zip 对象,封装在一起,并且一个一个对应

用fromkeys创建值为空的字典

None为值为空的意思 

>>> a=dict.fromkeys(['name','age','job'])
>>> a
{'name': None, 'age': None, 'job': None}

20.字典元素访问

通过键获得值,键不存在,就抛出异常

>>> a={'name':'gaoqi','age':18,'dd':[2,3,4]}
>>> a['name']
'gaoqi'
>>> a['haha']
Traceback (most recent call last):
  File "", line 1, in
    a['haha']
KeyError: 'haha'

通过get() 方法,键不存在,返回的是None,推荐使用

>>> a
{'name': 'gaoqi', 'age': 18, 'dd': [2, 3, 4]}
>>> a.get('name')
'gaoqi'
>>> a.get('kakak')
>>> print(a.get('kakak'))
None
>>> a.get('dda','不存在')
'不存在'

遍历

>>> a.items()#遍历,列出所有键值对
dict_items([('name', 'gaoqi'), ('age', 18), ('dd', [2, 3, 4])])
>>> a.keys()#列出所有的键
dict_keys(['name', 'age', 'dd'])
>>> a.values()#列出所有的值
dict_values(['gaoqi', 18, [2, 3, 4]])
>>> len(a)
3
>>> 'name' in a#键值在字典键中
True

21.字典元素添加、修改和删除

看看键是否存在,存在就覆盖,不存在就添加

>>> a={'name':'gaoqi','age':18,'dd':[2,3,4]}
>>> a['address']='Beijing'
>>> a
{'name': 'gaoqi', 'age': 18, 'dd': [2, 3, 4], 'address': 'Beijing'}
>>> a['dd']='abc'
>>> a
{'name': 'gaoqi', 'age': 18, 'dd': 'abc', 'address': 'Beijing'}

用update()函数

>>> b={'name':'gaoxixi','age':20}
>>> a.update(b)
>>> a
{'name': 'gaoxixi', 'age': 20, 'dd': 'abc', 'address': 'Beijing'}

字典中元素的删除

del和pop(),一个是函数,一个是 对象方法

>>> a
{'name': 'gaoxixi', 'dd': 'abc', 'address': 'Beijing'}
>>> c=pop(a['age'])
Traceback (most recent call last):
  File "", line 1, in
    c=pop(a['age'])
NameError: name 'pop' is not defined
>>> c=a.pop(a['age'])
Traceback (most recent call last):
  File "", line 1, in
    c=a.pop(a['age'])
KeyError: 'age'
>>> c=a.pop(a['dd'])
Traceback (most recent call last):
  File "", line 1, in
    c=a.pop(a['dd'])
KeyError: 'abc'
>>> c=a.pop('dd')
>>> c
'abc'
>>> a.clear()
>>> a
{}

popitems()对象的方法,随机的移除,因为字典是没有顺序的

22.序列解包

>>> x,y,z=(10,20,30)
>>> x
10
>>> y
20
>>> x,y,z=[10,20,30]
>>> x
10
>>> y
20

对于字典的解包

>>> a={'name':'gaoqi','age':18,'dd':[2,3,4]}
>>> x,y,z=a
>>> x
'name'
>>> y
'age'
>>> z
'dd'
>>> x,y,z=a.values()
>>> x
'gaoqi'
>>> y
18
>>> x,y,z=a.items()
>>> x
('name', 'gaoqi')
>>> y
('age', 18)

你可能感兴趣的:(python)