DAY4 Python数据类型之列表

一.列表

  列表:列表是由一系列按照特定顺序排列的元素组合。列表相当于一个容器,里面可以存储python的任意数据类型,在别的语言中又称为数组。

一.  创建列表

li = ['python',100,'java','c++']
str_list = ['c'*3]   ---->   ['c','c','c']      #谨记:是把字符串变成三个,而不是"ccc"
str_list = [['c'] * 3] ----> [['c','c','c']]   #谨记:列表*3,是把列表中的元素重复三遍

二.索引,切片,步长

(1)索引

  # 在列表中,根据索引访问到的元素,本来是什么类型就是什么类型。

li = ['python',100,'java','c++']
print(li[0],type(li[0]))
>>>'python',str
print(li[1],type(li[1]))
>>>100,int

 (2)切片

  # 列表的切片得到的还是一个列表

li = ['python',100,'java','c++']
print(li[0:3])
>>>['python', 100, 'java']

 (3)切片+步长(也可以反向步长)

li = ['python',100,'java','c++']
print(li[::-1])
>>>['c++', 'java', 100, 'python']

 

三.列表的增删改查

 #增

  append():追加到列表的最后

  insert(index,value):插入,把元素插入到对应位置

  extend():把序列的元素分别添加到列表中

#append():追加
l1 = ['alex','wusir','taibai']
l1.append('egon')   # 追加元素
l1.append([1,2,3])  # 追加列表
print(l1)

'''insert(index,value):插入,把元素插入到对应位置'''
l1 = ['alex','wusir','taibai']
l1.insert(1,'宝元')
print(l1)

'''extend()'''
# l1 = ['alex','wusir','taibai']
# l1.extend('abc')
>>>['alex','wusir','taibai','a','b','c']
# l1.extend([111,222,333])
# print(l1)

 # 删

  pop(index):事先知道元素对应的索引值,根据索引值来删除对应的元素,并且会返回该元素,方便后续使用。

  remove():事先知道元素的名称,根据元素名称来删除。

  clear():清空列表的元素,但保留列表本身

  del语句: 1.按照索引值来删除元素(与pop不同的是不可以返回元素)

       2.可以按照切片来删除元素

        3.可以在内存级别删除整个列表

'''pop():按照索引删除,并把删除的元素返回,方便以后使用'''
l1 = ['alex','wusir','taibai']
pop_item = l1.pop(0)
print(l1)
print(pop_item)

'''remove():知道元素名称,按照名称删除'''
l1 = ['alex','wusir','taibai']
l1.remove('alex')
print(l1)


'''clear():清空列表内容,保留列表本身'''
l1 = ['alex','wusir','taibai']
l1.clear()
print(l1)


'''del
# 1.可以按照索引删除
# 2.可以按照切片删除
# 3.可以在内存级别删除整个列表
# '''

l1 = ['alex','wusir','taibai']
del l1   # 内存级别删除
del l1[0]   #按照索引删除
del l1[0:3]  #按照切片删除

 #改

'''
1.按照索引去修改
2.按照切片去修改
'''
# l1 = ['alex','wusir','taibai']

'''按照索引去修改值'''
# l1[2] = '男神'   #l1[2]在等号左边表示索引位置

'''按照切片去修改'''
# l1[0:2] = '老男孩' #先把切片内容清空,再把后续内容迭代加入
# print(l1)

'''按照切片+步长修改:删除几个元素只能添加几个元素'''

 #查

   (1)按照索引,切片查找

  (2)for循环查询

'''
# l1 = ['alex','wusir','taibai']
#    for i in l1:
#       print(i)

 # 其他方法

'''
count()
len()
index()
sort():用于排序
reverse():翻转列表
'''
一般用于纯数字的列表排序
l2 = [5,3,6,2,4,7]
l2.sort()   #从小到大排序
l2.sort(reverse=True)   #从大到小排序
print(l2)

l2 = [5,3,6,2,4,7]
l2.reverse()
print(l2)

三.列表的嵌套

l3 = ['alex', 'wusir', ['taibai',99,'ritian'], 20]
# 1, 找到alex的e元素。
# 2, 将wusir变成大写。
# 3, 给此列表['taibai',99,'ritian'] 追加一个元素,'文周'
# 4,将 'taibai' 首字母大写
# 5,将 99 通过数字加1 的方式变成100,并放回原处。

'''找到alex的e元素。'''
# print(l3[0][2])

'''将wusir变成大写。'''
# l3[1]=l3[1].upper()
# print(l3)

'''给此列表['taibai',99,'ritian'] 追加一个元素,'文周'''
# l3[2].append('文周')
# print(l3)

'''将 'taibai' 首字母大写'''
# value = l3[2][0].capitalize()
# print(value)

'''将 99 通过数字加1 的方式变成100,并放回原处。'''

四.知识点补充

  知识点一:列表相加,通过'+'。

lst1 = [1,2,3]
lst2 = ['he','hesihao']
lst3 = lst1 + lst2
print(lst3)
>>>
[1, 2, 3, 'he', 'hesihao']

  知识点二题目:li=[11,22,33,44,55,66,77],将列表中索引为奇数的元素,全部删除

# 大多数人正常的想法,如下:
l1 = [11,22,33,44,55,66,77]
for i in range(len(l1)):
    if i % 2 == 1:
        l1.pop(i)
print(l1)
>>>IndexError: pop index out of range

---明明逻辑没有问题呀,怎么会报错,当你百思不得其解之时,你想到了debug这个功能~---
---通过debug,可以清楚的发现,就在你循环中删除元素时,列表中的元素的索引也在悄悄改变向前+1,嘿嘿-

所以请谨记:循环一个列表的时候,如果对元素进行删除,列表中元素的索引值也会在发生变化

方法一:定义一个新的列表,把符合的元素添加到新列表中,避免在原列表中进行操作。
l1 = [11,22,33,44,55,66,77]
l2 = []
for i in range(len(l1)):
if i % 2 ==0:
l2.append(l1[i])
l1 = l2
print(l1)
>>>
[11, 33, 55, 77]

方法二:观察后可以发现,从左向右删除,元素的索引会向前移,但是如果从右向左的话,
就避免了这个现象
l1 = [11,22,33,44,55,66,77]
for i in range(len(l1),-1,-1):
   if i % 2 == 1:
     l1.pop(i)
print(l1)
>>>
[11, 33, 55, 77]

方法三:通过切片+步长
del l1[1::2]
print l1
>>>
[11, 33, 55, 77]

 

  

元组:

  元组是python中的一种基本数据类型,又称为只读列表。因为不可变,所以元组可以作为字典的key。

# 创建元组
tuple1 = (23,24)
print(type(tuple1))

ip_port = ('192.168.1.1',8000)
host = {}
host['ip_port'] = ip_port
print(host['ip_port'][0])

  谨记:单个元素的元组,需要添加一个“,”号.

tu1 = ('str1')
tu2 = ([1,2,3])
print(type(tu1))
print(type(tu2))
>>>
<class 'str'>
<class 'list'>
tu3 = ('str',) tu4 = ([1,2,3],) print(type(tu3)) print(type(tu4))
>>>
<class 'tuple'>
<class 'tuple'>

总结:单个元素的元组必须添加一个","号,否则不是元组。(对象)-->该对象原来是什么数据类型,它就是什么数据类型。

  

 

 

 

  

posted @ 2018-08-07 18:04  hehehe1994  阅读(126)  评论(0编辑  收藏  举报