天池龙珠训练营Python_Task2: 数据结构_(1)列表

本文介绍了Python中的基本数据结构之一——列表,包括列表的创建、添加元素、删除元素、获取元素、常用操作符和其他方法。通过示例详细解析了如何操作列表,并提供了在线实践资源。

简介

介绍Pthon中的基本数据结构及其数据存储及使用。

本部分包括以下内容:

  1. 列表
  2. 元组
  3. 字符串
  4. 字典
  5. 集合
  6. 序列

1.列表

列表是有顺序的集合,没有固定的大小,能够保存任意数任意类型的Python对象。语法为[元素1,元素2,…, 元素n]
[ ]:中括号把所有元素括起来
,: 逗号用于元素之间的间隔

2.列表的创建

  • 例1:创建普通列表
x=['Mondy','Tuesday','wedenesday','Thusday','Thursday','Friday']
print(x,type(x))

x=[2,3,4,5,6,7]
print(x,type(x))
  • 例2:利用range()函数来数列列表
x=list(range(10)) #得到0-9,10个整数
print(x,type(x))

x = list(range(1, 11, 2)) #0-9中的奇数
print(x,type(x))

x = list(range(10, 1, -2)) #10-1中的偶数-倒序
print(x, type(x))
# [10, 8, 6, 4, 2] <class 'list'>
  • 例3:推导式创建列表列表
x=[0]*5  #扩展为5个0元素的列表
print(x,type(x))

x = [0 for i in range(5)]  #扩展为5个0元素的列表
print(x, type(x))

x = [i for i in range(10)] #用推导式代替list函数转换range() 的结果
print(x, type(x))

x = [i for i in range(1, 10, 2)]# 改变range 产生数列的步长
print(x, type(x))

x = [i for i in range(10, 1, -2)] #range 采用倒序产生数列
print(x, type(x))
x = [i ** 2 for i in range(1, 10)] #range 产生的数列作为平方项
print(x, type(x))

x = [i for i in range(100) if (i % 2) != 0 and (i % 3) == 0]#0-100之间是3的倍数,但不是2的倍数
print(x, type(x))

[0, 0, 0, 0, 0] <class ‘list’>
[0, 0, 0, 0, 0] <class ‘list’>
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9] <class ‘list’>
[1, 3, 5, 7, 9] <class ‘list’>
[10, 8, 6, 4, 2] <class ‘list’>
[1, 4, 9, 16, 25, 36, 49, 64, 81] <class ‘list’>
[3, 9, 15, 21, 27, 33, 39, 45, 51, 57, 63, 69, 75, 81, 87, 93, 99] <class ‘list’>

列表中可以存储对象, 也可以是指向对象的指针。
[1,3,4],实际有3个指针和3个整数对象
x=[a]*4 , 是创建4个指list对象的引用。

x = ['c'] * 3  #创建有3个'c'的列表
print(x,type(x))
a = [x] * 4   #创建4个指向x列表对象的元素
print(a, type(a))

[‘c’, ‘c’, ‘c’] <class ‘list’>
[[‘c’, ‘c’, ‘c’], [‘c’, ‘c’, ‘c’], [‘c’, ‘c’, ‘c’], [‘c’, ‘c’, ‘c’]] <class ‘list’>

  • 例4:混合列表创建
    混合列表,即列表中元素有多种数据类型
mix=[1,'table','4.56,['a','c','b']]  #列表mix数据有4种类型
print(mix,type(mix)

3.向列表中添加元素

list.append(obj)在列表末尾添加新的对象,只接受一个参数,参数可以是任何数类型,被添加的元素在list中保持着原结构类型。

  • 例1:加入一个数据元素
x=[1,2,3,4]
x.append(5)
print(x)

[1, 2, 3, 4, 5] <class ‘list’>

  • 例2:加入一个列表元素
x = ['Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday']
x.append(['Thursday', 'Sunday'])
print(x,len(x)) 

[‘Monday’, ‘Tuesday’, ‘Wednesday’, ‘Thursday’, ‘Friday’, [‘Thursday’, ‘Sunday’]] 6
除了lilst.append方法外,还有list.extend(seq)方法,可以在列表末尾一次追加另一个序列中的多个值(用新列扩展原来的列表)

x = ['Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday']
x.extend(['Thursday', 'Sunday'])
print(x)  

[‘Monday’, ‘Tuesday’, ‘Wednesday’, ‘Thursday’, ‘Friday’, ‘Thursday’, ‘Sunday’]
可以用来对两个列表的合成。
append:将原对象添加到列表末尾
extend:将原对象的拆开为元素添加到列表末尾。

4.删除列表中元素

例1:使用list.remove(obj)方法移除列表中匹配的元素。

x=['Ali','Tencent','Bidu']
y=x.remove('Tencent')     #弹出’Tencent‘

例2:按指定的索引值弹出列表中对应的元素。

x=['Ali','Tencent','Bidu']
y=x.pop(0)   #  默认弹出第一项
print(y)         #  Baidu
print(x)         #  ['Ali', 'Tencet']

x=['Ali','Tencet','Bidu']
y=x.pop()     # 默认弹出最后一项
print(y)         #  Baidu
print(x)         #  ['Ali', 'Tencent']

x=['Ali','Tencent','Baidu']
y=x.pop(-1)  # 弹出最后一项
print(y)        # Baidu   被弹出项
print(x)         #['Ali', 'Tencet'] --剩余列表项

x=['Ali','Tencent','Bidu']
y=x.pop(-2)
print(y)  # Tencet 被弹出项
print(x)  # ['Ali', 'Bidu']  --剩余列表项

例3:使用del语句删除多个元素。

x=['Ali','Tencent','Bidu']
del x[0:3]  # 一次删除 x[0]  x[1]  x[2] 三个元素
print(x)   # []

索引值规律:从左向右依次为0,1,2…从右向左[…-3,-2,-1]

5.获取列表中元素

例1:通过索引值获取列表中的单个元素

x=['Ali','Tencent','Bidu',['Uited States',  'Google']]
t1=x[0]   # 得到第一个元素'Ali'   
print(t1)
t2=x[-1]  # 得到最后一个元素['United States']
print(t2)

例2:使用切片的方式一次获取多个元素

x=['Ali','Tencent','Bidu',['Uited States',  'Google']]
print( x[:] ) #获取列表中的所有元素

t1=x[1:]   # 获取指标从1开始往后列表所有的元素
print(t1)   # ['Tencent', 'Bidu', ['Uited States', 'Google']]

t2=x[-2:]  # 获取-2指标开始往前所有的元素
print(t2)   # ['Ali', 'Tencent']

t2=x[1:3 ]  # 获取指标从1开始到3之前的元素(不包括指标3对应的元素)
print(t2)   # ['Ali', 'Tencent']

x=['Ali','Tencent','Bidu',['Uited States',  'Google']]
t2=x[-3:-1]  #指标-3到-1对应的元素(不包括指标-1对应的元素)。注这里指标要升序,不能写成[-1:-3]
print(t2)      # ['Tencent', 'Bidu']   

例3:浅拷贝与深拷贝

list1 = [123, 456, 789, 213]
list2 = list1        # list2与list1 指向同一个列表对象
list3 = list1[:]     # list3与list1指向不同的列表对象
print(id(list1),id(list2),id(list3)) #  3101950469896 3101950469896 3101967351752

# list1,与list2的对象ID相同,而 list3 与 list1所指列表对象不同,只是列表对象的值相同。
print(list2)  # [123, 456, 789, 213]  
print(list3)  # [123, 456, 789, 213]

# 对list1列表元素进行排序,那么list2与其所指对象相同,输出也被排序。list3与lis1所指对象不同,未排序。
list1.sort()  
print(list2)  # [123, 213, 456, 789]   # 排序
print(list3)  # [123, 456, 789, 213]   # 未排序

6.列表常用操作符

  • 等号==: 两个列表完全相同返回True,否则为False
  • 连接符+:首尾连接两个列表
  • 重复运算符*:重复复制连接
  • 成员运算符in,not in :
list1=['TianChi','Python']
list2=['TianChi','Java']

print(list1==list2) # False
print(list1+list2) #['TianChi', 'Python', 'TianChi', 'Java']
print(list1*3)#['TianChi', 'Python', 'TianChi', 'Python', 'TianChi', 'Python']

7.列表的其他方法

  • list.count(obj):统计某元素在列表中出现的次数。
list1=['TianChi','Python','TianChi','Java']
print(list1.count('TianChi'))  # 2
  • list.index(x[,start[,end]]) :从列表中找出某个值第一个匹配项的索引位置
list1=['TianChi','Python','TianChi','Java']
print(list1.index('TianChi'))  # 0
  • list.reverse() 对列表中元素进行反向排序,无返回值
    list.sort(key=None, reverse=False) 对原列表进行排序。
list1=['TianChi','Python','TianChi','Java']
list1.reverse()  # list1列表进行倒序
print(list1)  #['Java', 'TianChi', 'Python', 'TianChi']
  • list.sort(key=None, reverse=False) 对原列表进行排序,无返回值。
# 获取列表的第二个元素
def takeSecond(elem):
    return elem[1]

x = [(2, 2), (3, 4), (4, 1), (1, 3)]
x.sort(key=takeSecond)
print(x)  # [(4, 1), (2, 2), (1, 3), (3, 4)]   ;按第2个元素排序 

x.sort(key=lambda a: a[0])
print(x)
# [(1, 3), (2, 2), (3, 4), (4, 1)]  #按第1 个元素排序 

注:Python 的小练习题
http://www.practicepython.org/solution/2014/12/25/23-file-overlap-solutions.html
Python的在线运行库
https://repl.it/languages/python3

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值