Python list tuple dict set 四种数据类型

论坛 期权论坛 脚本     
已经匿名di用户   2022-5-29 19:15   971   0

一 汇总

数据类型list(列表)tuple(元组)dict(字典)set(集合)
特点有序

有序

元素不可改变

运行商tuple的性能是list的数倍

无序

key必须是不可变的类型

tuple可以作为key

value可以是任意类型的元素,可以是list、tuple等

无序

元素不重复

集合以大括号开始和结束。

定义

L=[]

L=[1,2,3]

T = ('Alice', 'Bob')
L = list(T)
T=()
T=(1,)
T = ('Alice', 'Bob', 'Candy')
T=(1,'CH',[3,4])
L = ['Alice', 'Bob', 'Candy']
T = tuple(L)

d=dict()

d = {
'Alice': 45,
'Bob': 60
}

set()

set(['Jenny', 'Ellena'])

a={1,2,3}

setaa=set('aaabbc') #可以向set函数传递任意序列快速生成一个集合。

访问元素
for item in L:
    print(item)
L[0]
L[-1]
L[1:]
L[:3]
T[0]
# 切片
print(T[1:3])
key不存在时,会报错
d['Bob']
key不存在时,返回None
d.get('Alice')
dict.get(key,default=None)key在dict中返回对应的值,否则返回default的值
判断是否存在a in L

a in T

if 'Alice' in d:

Alice' in name_set

添加元素

追加到末尾:

L.append('Candy')

不能添加数据d['Mimi'] = 72

一次添加一个

name_set.add('Gina')

插入到指定位置:

L.insert(2, 'Candy')

value可以是任意类型的元素:
d['Mimi'] = [72, 73]

一次添加多个

new_names = ['Hally', 'Isen', 'Jenny', 'Karl']

name_set.update(new_names)

extend([x,x]) \\列表末尾增加数据项集合
删除元素

删除最后一个/指定位置元素,并返回:

name = L.pop()
print(name) # ==> Ellena
name = L.pop(2)
删除指定key及其对应的value,并返回value:
d.pop('Alice')

remove

删除不存在元素会报错

name_set.remove('Jenny')

discard

name_set.discard('Jenny')

修改元素
L[2] = 'Canlina'
d['Bob'] = 75
清除所有元素L.clear()
d.clear()

name_set.clear()

其他

count()统计某个元素出现的次数:

T.count('Alice')

返回dict的所有key:

L=d.keys()

判断是否子集和超集

s1 = set([1, 2, 3, 4, 5])

s2 = set([1, 2, 3, 4, 5, 6, 7, 8, 9])

# 判断s1是否为s2的子集

s1.issubset(s2) # ==> True

# 判断s2是否为s1的超集

s2.issuperset(s1) # ==> True

remove(x) \\ 删除一个特定的数据项x,未找到时会报错

index()返回指定元素的下标:

T.index('Alice')

遍历dict:

for key in d: # 遍历d的key
    value = d[key]

判断集合是否有重合

有重合,返回False

s1.isdisjoint(s2)

isinstance(x,list) \\ 检查某个特定标识符是否包含某个特定类型的数据

dir(__builtins__) \\ 查看Python提供的内置方法列表

help(input) \\ 查看BIF能做什么

items()方法会返回dict中所有的元素,每个元素包含key和value:

for key, value in d.items():
    if value > 60:
        print(key, value)

返回两个集合中都包含的元素

s1.intersection(s2

切片[::-1]是将列表或字符倒过来

获取dict的所有value:

for v in d.values():
    print(v)

二 列表

列表操作

合并两个列表

>>> [1,2,3,4]+[2,3]
[1, 2, 3, 4, 2, 3]

乘法(列表元素重复):

>>> [2,3]*2
[2, 3, 2, 3]

将列表转换为一个字符串

''.join(lista)

new_phase=new_phase+''.join([phare[5],phare[4],phare[7],phare[6]]) #可以join一个列表

列表赋值

a=[1,2,3]

b=a

c=a.copy()

列表推导

将一个列表转换为一个新列表

new_list=[fun(item) for item in old_list] # fun是所使用的函数

mins=[1,2,3]

secs=[m*60 for m in mins]

三 元组

元组是不可变的列表,因此可以跟列表一样进行切片,结果仍是元组

合并两个元组,乘法:

>>> (1,2,3)+(4,5,6)
(1, 2, 3, 4, 5, 6)
>>> (1,2)*2
(1, 2, 1, 2)

类型转换

元组数据类型可以把不是元组的容器转换为元组,比如将列表转换成元组。

L = ['Alice', 'Bob', 'Candy', 'David', 'Ellena']
print(L) # ==> ['Alice', 'Bob', 'Candy', 'David', 'Ellena']
T = tuple(L)
print(T) # ==> ('Alice', 'Bob', 'Candy', 'David', 'Ellena')

L = list(T)

可以以这种方式定义元组

(sarah_name,sarah_birth)=sarah.pop(0),sarah.pop(0)

#sarah是个list

元组只包含一个对象时,也要带个逗号。

四 序列

str list tuple都是序列

字符串和元组均是不可变类型。

共同的操作:

通过索引访问

>>> 'hello world'[2]
'l'
>>> [1,2,3][2]
3

切片

>>> 'hello world'[0:2]
'he'
>>> [1,2,3][0:2]
[1, 2]
>>> 'hello world'[::-1]
'dlrow olleh'

加法和乘法

两个列表/元组/字符串相加;列表/元组/字符串乘以一个数字。

>>> 'abc'+'de'
'abcde'
>>> 'ab'*2
'abab'

in操作符

>>> 'h' in 'hello world'
True
>>> 3 in [1,2,3]
True
>>> 3 not in [1,2,3]
False

元素个数/字符串长度len()

>>> len([1,2,3])
3
>>> len('ab')
2
>>> len((2,3))
2

max()min()求最大/小值

>>> max('ab')
'b'
>>> max((1,2,3))
3
>>> max([5,4])
5
>>> min('acefg')
'a'
>>> min((2,0))
0
>>> min([4,5])
4

五 集合

集合操作

len() 求长度

in / not in 判断元素是否在/不在集合内

>>> len({1,2,3})
3
>>> 2 in {1,2,3}
True
>>> 1 not in {1,2,3}
False

union/|合并集合

>>> a={'a','c'}

>>> b='ab'

>>> a.union(set(b))

{'a', 'b', 'c'}

>>> {1,2,3,4,5,6} | {3,4,7}
{1, 2, 3, 4, 5, 6, 7}

difference/-求差集

包含在a中但不在b中的对象。

>>> a.difference(set(b))

{'c'}

>>> {1,2,3,4,5,6}-{3,4}
{1, 2, 5, 6}

intersection/&求交集

>>> a.intersection(set(b))

{'a'}

>>> {1,2,3,4,5,6} & {3,4}
{3, 4}

六 字典

遍历字典

for key in d: # 遍历d的key
    value = d[key]
    print(key, value)

for key, value in d.items():

    print(key, value)

#items()方法会返回一个键值对列表

字典可以对键进行排序。

sorted(dictName) 只能用sorted

初始化setdefault

字典使用前确保初始化:

if i in found:

    found[i]+=1

else:

    found[i]=1

逆置条件缩短上方代码:

if i not in found:

            found[i]=0

 found[i]+=1

上方两行代码又可以替换为:

found.setdefault(i,0)  #初始化(如果需要)

found[i]+=1

setdefault()方法允许我们在运行时动态扩展一个字典,而不用提前初始化字典中的所有数据行

分享到 :
0 人收藏
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

积分:81
帖子:4969
精华:0
期权论坛 期权论坛
发布
内容

下载期权论坛手机APP