一、列表的定义

      python内置了一种数据类型是列表:list 。list 是一种有序的集合,可以随时添加和删除其中的元素。有点类似于我们C语言中的数组,但是数组只可以存放同一类型的数据,尔列表list可以存放任意数据类型的元素,他是一种或多种的数据元素的集合。

1. 列表的定义

列表内可以添加同种类型元素;
l1 = [1,2,3,4,5]
print(l1,type(l1))

也可以是多种类型元素;
l2 = [1, 4.5, 1+2j, "hello"]
print(l2, type(l2))

2、列表的的特性: 索引, 切片, 连接, 重复, 成员操作符;

students_name = ['yu','tao','natasha','steak','apple']



(1). 索引
正向索引
print(students_list[0])
反向索引
print(students_list[-1])


(2). 切片
print(students_list[::-1])

(3)反向输出
s = "hello xiao mi"   # "mi xiao hello"
print(s.split)
print(s.split[::-1])
print(" ".join(s.split()[::-1]))
(4). 重复
print(students_list*3)


(5). 连接
print(students_list + ['orange', 'banana'])



(6). 成员操作符
print('apple' in students_list)
print('fentiao' in students_list)


(7). for循环遍历列表元素
for student in students_list:
    print("学生姓名:%s" %(student))

(8). 列表里面嵌套列表

goods = [
    ['apple', 2, 100],
    ['banana', 3, 50],
    ['computer', 4000, 13]
]
# 嵌套索引
print(goods[0])
print(goods[1][2])

Python_day03---列表list

3、练习:按要求输出列表内容

假定有下面这样的列表:
    names = ['fentiao', 'fendai', 'fensi', 'apple']

输出结果为:'I have fentiao, fendai, fensi and apple.';并求列表的长度
考察点:
    切片:
    字符串的join方法:
names = ['fentiao', 'fendai', 'fensi', 'apple']
print("I have " + ",".join(names[:-1]) + ' and ' + names[-1])
print(len(names))
Python_day03---列表list
4、列表的增加

name_list = ["apple","banana","orange"]

 (1) append: 追加, 追加元素到列表的最后;
 name_list.append('westos')
 print(name_list)

(2) name_list.append(['linux', 'c#', 'java'])
 print(name_list)

(3) insert: 添加元素到指定索引的前面;
 name_list.insert(0, 'java')
 print(name_list)

(4) extend: 追加多个元素到列表中;
 name_list.extend(['c', 'C++'])

 print(name_list)

Python_day03---列表list

5、列表的删除

name_list = ["apple","banana","westos","redhat"]

(1)remove: 删除指定的值
name_list.remove('apple')
print(name_list)

(2) name_list.pop(): pop删除指定索引的值, 默认情况删除最后一个元素;

 a = name_list.pop(), a就是删除的那个元素;

name_list.pop(0)

print(name_list)

(3) clear: 清空列表
 name_list.clear()
 print(name_list)

Python_day03---列表list
(4) del删除列表元素
del name_list[0]
del name_list[-1]
del name_list[1:]
del name_list[:-1]
del name_list

Python_day03---列表list

6、列表的修改

name_list = ["apple","banana",“orange”,"westos","redhat"]

(1)通过索引, 重新赋值;
name_list[0] = 'redhat'
print(name_list)

(2)通过切片重新赋值
name_list[:2] = ['java', 'C']

print(name_list)

Python_day03---列表list

7、列表的查看

name_list = ["apple","banana",“orange”,"westos","redhat"

(1) 查看指定元素的索引值;
print(name_list.index('redhat'))

print(name_list.count('fendai'))

Python_day03---列表list


(2) 按照指定的ASCII码进行排序的;
name_list.sort()

print(name_list)

Python_day03---列表list

(3)不区分大小写进行排序;
name_list.sort(key=str.lower)

print(name_list)

Python_day03---列表list



(4)列表的反转; 类似于name_list[::-1]
print(name_list[::-1])
name_list.reverse()

print(name_list)

Python_day03---列表list

8、练习:用户登陆系统

 1). 已知多个用户名和密码分别保存在列表中;
 2). 判断用户名是否存在,
                如果登陆的用户不存在,则报错;;
                如果用户存在, 则判断密码是否正确:
                如果正确, 输出用户登陆成功;
                如果不正确, 输出登陆失败;

  3). 为防止黑客暴力**密码, 登陆最多有3次机会;

user_name = ['root', 'student']
user_passwd = ['redhat', 'yutao']

trycount = 0
while trycount < 3:
    trycount += 1
    name = input("请输入用户名:")
    # 1.判断用户是否存在?
    if name in user_name:
        # 2. 判断密码是否正确?
        passwd = input("密码:")
        # 找出系统存储的inuser用户的密码;
        index = user_name.index(inuser)              # inuser='root', index=0  找到用户名的索引值
        passwds = user_passwd[index]                  # passwd='redhat'    在密码列表中通过索引值找出相对应的密码
        if passwd == passwds:
            print("%s登陆成功!" %(name))

            break

        else:

               print("密码错误!")

    else:
        print("用户名%s不存在" %(name))
else:

    print("尝试次数超过3次!")

Python_day03---列表list

9、列表的嵌套

import pprint

li1 = [
    [1, 2, 3],
    [2, 3, 4],
    [3, 4, 5]
]
li2 = [
    [2, 3, 4],
    [1, 2, 3],
    [1, 2, 3]
]

# numpy,  pandas, matplotlib
result = [
    [0, 0, 0],
    [0, 0, 0],
    [0, 0, 0]
]

#  i : 0, 1, 2
for i in range(len(li1)):
    # j: 0, 1, 2
    for j in range(len(li1[i])):
        # [0][0], [0][1], [0][2]
        # [1][0]
        result[i][j] = li1[i][j] + li2[i][j]
pprint.pprint(result)


10、练习:练习棒球的的分系统

你现在是棒球比赛记录员。
给定一个字符串列表,每个字符串可以是以下四种类型之一:
1.整数(一轮的得分):直接表示您在本轮中获得的积分数。
2. "+"(一轮的得分):表示本轮获得的得分是前两轮有效 回合得分的总和。
3. "D"(一轮的得分):表示本轮获得的得分是前一轮有效 回合得分的两倍。
4. "C"(一个操作,这不是一个回合的分数):表示您获得的最后一个有效 回合的分数是无效的,应该被移除。
每一轮的操作都是永久性的,可能会对前一轮和后一轮产生影响。
你需要返回你在所有回合中得分的总和。

示例 1:

    输入: ["5","2","C","D","+"]
    输出: 30
    解释:
        第1轮:你可以得到5分。总和是:5。
        第2轮:你可以得到2分。总和是:7。
        操作1:第2轮的数据无效。总和是:5。
        第3轮:你可以得到10分(第2轮的数据已被删除)。总数是:15。
        第4轮:你可以得到5 + 10 = 15分。总数是:30。


示例 2:

    输入: ["5","-2","4","C","D","9","+","+"]
    输出: 27
    解释:
        第1轮:你可以得到5分。总和是:5。
        第2轮:你可以得到-2分。总数是:3。
        第3轮:你可以得到4分。总和是:7。
        操作1:第3轮的数据无效。总数是:3。
        第4轮:你可以得到-4分(第三轮的数据已被删除)。总和是:-1。
        第5轮:你可以得到9分。总数是:8。
        第6轮:你可以得到-4 + 9 = 5分。总数是13。
        第7轮:你可以得到9 + 5 = 14分。总数是27。

注意:
    输入列表的大小将介于1和1000之间。

    列表中的每个整数都将介于-30000和30000之间。

# score_list = ["5","2","C","D","+"]
score_list = ["5","-2","4","C","D","9","+","+"]
result_list = []

def func_(score_list):
    for i in range(len(score_list)):    #遍历列表
        try:                            #try:与if相似,但是try不需要判断语句  
            result = int(score_list[i]) #若值可转换为int,则为有效分数,其余则是方法
            result_list.append(result)
            print(result_list)
        except:
            if score_list[i] == "C":
                result_list.remove(result_list[-1])
                print(result_list)
            elif score_list[i] == "D":
                result_list.append(result_list[-1] * 2)
                print(result_list)
            elif score_list[i] == "+":
                result_list.append(result_list[-1] + result_list[-2])
                print(result_list)
    print(sum(result_list))

func_(score_list)
 

11、列表的内置方法

(1)print(min([2, 1,2,343,545,6]))
        print(max([2, 1,2,343,545,6]))
        print(sum([2, 1,2,343,545,6]))
        print(sorted([2, 1,2,343,545,6]))

(2)

for i in reversed([2, 1,2,343,545,6]):

    print(i,end=',')
print('\n')
(3)
for i in zip([1,2,3], ['a','b', 'c']):
    print(i, end=',')
print()
(4) 枚举, 返回列表的索引及对应的元素值;
for i in enumerate(['a', 'b', 'c']):
    print(i,end=' ')

Python_day03---列表list

12、_is 与 == 的区别

(1)在系统中我们对变量有三个定义

id: 在内存中存储的位置

type: 变量的;类型

value: 值是否相等;

(2)== 判断: type, value
         is 判断 :type, value, id
 结论:
   is表示的是对象标识符;表示两个变量的值是否在同一块内存空间;
   ==表示的是值是否相等;

 总结: is返回值为True, ==返回一定是True;



a = 'hello'
b = 'hello world'
print(a == b)


c = 99999999
d = 99999999
print(c==d)
print(id(c), id(d))


Python_day03---列表list

13、深拷贝与浅拷贝

li = [1,2,3,4,5,6]
(1)拷贝:
 不是拷贝, 是将li1的指向li的内存位置;
 li1 = li
 print(li1 is li)


 (2)拷贝列表成功

 li2 = li[:]

print(li2 is li)

li2.append(5)

print(li)

 print(li2)
Python_day03---列表list

(3) 浅拷贝
 li = [1,,2, 3, [2, 3]]
 li3 = li[:]
 print(li3 is li)
 print(li3[-1][0] is li[-1][0])

 li3[-1].append(0)
 print(li)
 print(li3)

import copy

li = [1, 2, 3, [2, 3]]
li3 = copy.copy(li)

li.append(1)

print(li)

print(li3)

Python_day03---列表list

(4)深拷贝
import copy
li = [1, 2, 3, [2, 3]]
li2 = copy.deepcopy(li)


print(li is li2)
li2[-1].append(0)
print(li)

print(li2)

Python_day03---列表list


相关文章: