列表(list)和元组(tuple)
列表和元组,都是一个可以放置任意数据类型的有序集合
l = [1, 2, 'hello', 'world'] # 列表中同时含有 int 和 string 类型的元素
l
[1, 2, 'hello', 'world']
tup = ('jason', 22) # 元组中同时含有 int 和 string 类型的元素
tup
('jason', 22)
- 列表是动态的,长度大小不固定,可以随意地增加、删减或者改变元素(mutable)。
- 而元组是静态的,长度大小固定,无法增加删减或者改变(immutable)。
如果想对已有的元组 做出改变,可以基于原有的元组,创建新的元组。
比如,同样添加元素5
tup = (1, 2, 3, 4)
new_tup = tup + (5, ) # 创建新的元组 new_tup,并依次填充原元组的值
new _tup
(1, 2, 3, 4, 5)
l = [1, 2, 3, 4]
l.append(5) # 添加元素 5 到原列表的末尾
l
[1, 2, 3, 4, 5]
列表和元组 都支持 负数索引,-1表示最后一个元素,-2表示倒数第二个元素
都支持切片操作,需要注意的是切片操作:包含前面的数字,不包含后面的数字
l = [1, 2, 3, 4]
l[1:3] # 返回列表中索引从 1 到 2 的子列表
[2, 3]
tup = (1, 2, 3, 4)
tup[1:3] # 返回元组中索引从 1 到 2 的子元组
(2, 3)
列表和元组之间的转换
通过 list() 和 tuple() 函数相互转化:
list((1, 2, 3))
[1, 2, 3]
tuple([1, 2, 3])
(1, 2, 3)
支持的函数
l = [3, 2, 3, 7, 8, 1]
l.count(3)
2
l.index(7)
3
l.reverse()
l
[1, 8, 7, 3, 2, 3]
l.sort()
l
[1, 2, 3, 3, 7, 8]
tup = (3, 2, 3, 7, 8, 1)
tup.count(3)
2
tup.index(7)
3
list(reversed(tup))
[1, 8, 7, 3, 2, 3]
sorted(tup)
[1, 2, 3, 3, 7, 8]
count(item) 表示统计 列表/元组 中 item出现的次数
index(item) 表示返回 列表/元组 中 第一次出现item的索引
list.reverse() 和 list.sort() 表示 原地倒转列表 和 排序
reversed() 和 sorted() 同样也会翻转 和 排序,但是会返回新的,原有的不变
字典(dict)和集合(set)
字典的创建方式,下面四种相等
d1 = {'name': 'jason', 'age': 20, 'gender': 'male'}
d2 = dict({'name': 'jason', 'age': 20, 'gender': 'male'})
d3 = dict([('name', 'jason'), ('age', 20), ('gender', 'male')])
d4 = dict(name='jason', age=20, gender='male')
d1 == d2 == d3 ==d4
True
集合的创建方式
s1 = {1, 2, 3}
s2 = set([1, 2, 3])
s1 == s2
True
集合set不支持索引操作,想要判断一个元素是否在dict或set中,可以使用 value in dict/set来判断
s = {1, 2, 3}
1 in s
True
10 in s
False
d = {'name': 'jason', 'age': 20}
'name' in d
True
'location' in d
False
字典和集合的 增/删/改 操作:
d = {'name': 'jason', 'age': 20}
d['gender'] = 'male' # 增加元素对'gender': 'male'
d['dob'] = '1999-02-01' # 增加元素对'dob': '1999-02-01'
d
{'name': 'jason', 'age': 20, 'gender': 'male', 'dob': '1999-02-01'}
d['dob'] = '1998-01-01' # 更新键'dob'对应的值
d.pop('dob') # 删除键为'dob'的元素对
'1998-01-01'
d
{'name': 'jason', 'age': 20, 'gender': 'male'}
s = {1, 2, 3}
s.add(4) # 增加元素 4 到集合
s
{1, 2, 3, 4}
s.remove(4) # 从集合中删除元素 4
s
{1, 2, 3}
字典的排序
d = {'b': 1, 'a': 2, 'c': 10}
d_sort_by_key = sorted(d.items(), key = lambda x: x[0])
d_sort_by_value = sorted(d.items(), key = lambda x: x[1])
d_sorted_by_key
[('a', 2), ('b', 1), ('c', 10)]
d_sorted_by_value
[('b', 1), ('a', 2), ('c', 10)]
集合的排序
s = {3, 4, 2, 1}
sorted(s) # 对集合的元素进行升序排序
[1, 2, 3, 4]
注意:
d = {'name': 'jason', ['education']: ['Tsinghua University', 'Stanford University']}
使用列表list作为key,在dict是不允许的,因为list是个变化的值,dict中的key要求是不可变的,随着key的变化,会有重复的key,所以list不可以作为字典dict中的key。元组tuple是可以的。
字符串
python中使用 单引号('') 双引号("") 三引号(''' '''或""" """) 是相同的
name = 'jason'
city = 'beijing'
text = "welcome to jike shijian"
在字符串中,单引号可以内嵌带引号的字符串。比如:
"I'm a student"
三引号字符串,则主要应用于多行字符串的情境,比如函数的注释等等。
def calculate_similarity(item1, item2):
"""
Calculate similarity between two items
Args:
item1: 1st item
item2: 2nd item
Returns:
similarity score between item1 and item2
"""
字符串中,使用转义字符
- \\ 表示\
- \' 表示单引号'
- \" 表示双引号"
字符串常用操作
同样支持索引,切片,遍历
name = 'jason'
name[0]
'j'
name[1:3]
'as'
for char in name:
print(char)
j
a
s
o
n
需要注意,Python中的字符串是不可变的,下面操作会报错
s = 'hello'
s[0] = 'H'
Traceback (most recent call last):
File "", line 1, in
TypeError: 'str' object does not support item assignment
改变,可以使用下面两种方式
s = 'H' + s[1:]
s = s.replace('h', 'H')
- string.strip(),表示去掉首尾的 空字符
- string.strip(str),表示去掉首尾的 str 字符串;
- string.lstrip(str),表示只去掉开头的 str 字符串;
- string.rstrip(str),表示只去掉尾部的 str 字符串。
字符串的格式化
'person id: {}, name: {}'.format(id, name)
string.format() 就是所谓的格式化函数,大括号{}就是格式符为后面的真实变量预留位置