python(16)-列表list,for循环

非数值类型:列表,元祖,字典,字符串,都是Python中的高级变量类型
Python中的非数值类型都支持一些共同的操作:都是一个序列,也可以理解为容器,用来装东西用

列表数据类型的应用场景:存储多个相同类型的数据,通过迭代遍历,针对每一项元素,执行相同的操作
注意: 列表中可以存不同类型的数据,但是一般不这么用。
在这里插入图片描述
Python中的列表由于其灵活的操作,既可实现堆栈操作(先进后出),还可实现队列操作(先进先出)

1 列表定义

列表-在其他语言中等价于数组,用于存储一串信息
记录三个人的名字,可以 用三个字符串变量存储,也可以用一个列表存储多个变量

name_list=[“zhangsan”,“lisi”,“wangwu”]

用[]定义列表,其中元素用逗号,分隔

2 列表中取值

利用索引取出列表中的元素,索引超出范围,程序会报错

name_list[1]

zhangsan

3 列表的增,删,查,改

列表的常用操作包括 :增,删,查,改。可以通过函数方法两种方式来执行常用操作:函数通过函数名()调用,方法通过变量名.方法名调用

3.1 修改指定位置的数据

name_list[1]=‘lisisi’

3.2 确定指定元素的索引

name_list.index(“lisi”)

使用index方法需要注意,如果传递的数据不在列表中,程序会报错

3.3 增加操作

1.向列表的末尾追加数据

name_list.append(“wangxiaoer”)

2.在列表的指定索引位置添加一个数据(添加在0,1之间)

name_list.insert(1,“xiaomeiemi”)

3.将可以迭代的数据增加到当前对象的末尾

temp_list=[“sunwukong”,“zhuerge”,“sanshidia”]
name_list.extend(temp_list)

3.4 删除操作

1.删除指定的数据,当列表中有多个“zhangsan”,会删掉一个第一个指定数据

name_list.remove(“wangwu”)

2.pop默认可以将列表中最后一个元素删除

name_list.pop()

pop方法可以指定索引,删除元素,同时可以将弹出的元素返回

a=name_list.pop(3)

3.claer方法将列表清空呢

name_list.clear()

name_list=[]

Python2.7版本的编译器中没有这个方法偶,如果有,会将列表清空呢

4.扩展: Del 从列表中删除数据,用于删除指定索引的元素

del name_list[1]

del本质上是将变量从内存中删除,如果使用del删除了一个变量,那么后续就不能使用该变量。慎重使用

3.5 元素是否存在与列表中 in

在这里插入图片描述

3.6 在指定索引位置插入元素

list.insert(index, obj)

4 列表的数据统计

数据统计操作包括一个函数一个方法

1.统计列表数据保存了多少个数据,列表数据的长度

list_len=len(name_list)
print(“列表中包含:%d”%list_len)

2.统计某个数据出现的次数

count=name_list.count(“zhangsan”)
print(“zhangsan 出现了:%d”%count)

5 列表排序

新定义两个列表:
name_list=[“zhangsan”,“lisi”,“wangwu”,“wangxiaoer”]
num_list=[6,8,4,1,10]

默认升序排序,字符串按首字母的顺序a-z

name_list.sort()
num_list.sort()

降序输出

name_list.sort(reverse=True)
num_list.sort(reverse=True)

翻转(逆序)

name_list.reverse()
num_list.reverse()

翻转列表一部分内容

#to reverse a part of the string in place
a = [1,2,3,4,5]
a[2:4] = reversed(a[2:4]) # This works!
a[2:4] = [0,0] # This works too.
a[2:4].reverse() # But this doesn’t work

参考资料:https://cloud.tencent.com/developer/ask/53697

索引实现列表逆序

a=[1,2,3,4,5]
a[::-1] # 为a[i:j:s]的缺省表示,i=0,j=len(a),s=-1

参考博文:https://blog.youkuaiyun.com/marraybug/article/details/85163484

lambda表达式在sort函数中的使用
假如a是一个由元组构成的列表,对该列表进行排序时,我们需要用到参数key,也就是关键词,如下面代码所示,lambda是一个匿名函数,是固定写法;x表示匿名函数的输入,即列表中的一个元素,在这里,表示一个元组,x只是临时起的一个名字,你可以使用任意的名字;x[0]表示匿名函数的输出,即元组里的第一个元素,即key = x[0];所以这句命令的意思就是按照列表中第一个元素进行排序。

a = [(‘b’, 4), (‘a’, 12), (‘d’, 7), (‘h’, 6), (‘j’, 3)]
a.sort(key=lambda x: x[0])
print(a)
#输出
[(‘a’, 12), (‘b’, 4), (‘d’, 7), (‘h’, 6), (‘j’, 3)]

参考博文:https://www.cnblogs.com/lovewhale1997/p/11424429.html

6 列表的循环遍历-for

循环遍历:依次从列表中获取数据,在循环体内部对每个元素执行相同的操作。为了提高列表的遍历效率,专门提供了迭代iteration遍历,For能够实现迭代遍历。

name_list=["zhangsan","lisi","wangwu","wangxiaoer"]
# 下标迭代遍历
for i in range(len(name_list)):
    print("我的名字叫:%s"%name_list[i])
# iteration遍历, 顺序的从列表中依次获取数据,每一次循环过程中,数据都会保存在my_name
# 通过my_name这个变量中,每次在循环体内部都可以访问当前这一次获取到的数据
for my_name in name_list:
    print("我的名字叫:%s"%my_name)

优点:不需要设计计数器,也不需要对计数器进行操作

6.1 enumerate

Tips1: enumerate可以 返回 索引 和 值,同时可以用第二个参数指定索引的初始值(下例子中的1):

 list1 = ["这", "是", "一个", "测试"]
 for index, item in enumerate(list1, 1):
        print index, item

# print 输出:
    123 一个
    4 测试

# 相比与使用 for i in range(len(list))访问列表元素更方便
for i in range (len(list1)):
        print i ,list1[i]

6.2 zip()

Tips2: 打包两个可遍历数据,一起循环-zip() :

# 两个数据长度一致
>>> a=[1,2,3,4]
>>> b=[5,6,7,8]
>>> for i,j in zip(a,b):
...     print(i,j)
... 
1 5
2 6
3 7
4 8
# 两个数据长度不一致,输出与短数据长度对齐
>>> a=[1,2,3,4]
>>> c=[0,0]
>>> for i,j in zip(a,c):
...     print(i,j)
... 
1 0
2 0

7 多维度list 的切片操作

>>> a = [[1,2,3],[4,5,6],[7,8,9]]
>>> a        // 没有size,和shape方法
[[1, 2, 3], [4, 5, 6], [7, 8, 9]]
>>> a[0]
[1, 2, 3]
>>> a[0][0]
1
>>> a[:2]    // 结果是一个list ,再次切片也只是对于第0维度的一个切片
[[1, 2, 3], [4, 5, 6]]
>>> a[:][0]  // 并不是想要的所有行,第0[147],想要实现这个切片操作,可以将其转换为numpy数组再操作
[1, 2, 3]

转换成numpy数组,拼接时没有list.append()那么直接,需要用numpy.concatenate()进行拼接,但是这个拼接维度的数量不会增加,如果需要多增加一个维度,可以使用[array1,array2,array3]再转tensor/array的方法进行操作。

8 列表的加法-链接

两个链表相加,实现两个链表的拼接:

[1,2]+[3,4]
输出:[1, 2, 3, 4]

### Python 列表练习题 以下是关于 Python 列表的一些经典练习题及其解答: #### 创建列表并操作 1. **创建一个名为 `names` 的列表,添加指定成员,并打印其长度以及内容。** ```python names = ["陈贤贤", "大财神", "飞鱼", "WuYing", "阿阳", "Black"] print(f"列表的内容为: {names}") print(f"列表的长度为: {len(names)}") # 输出列表长度 ``` 2. **向已有的列表中追加新成员,并重新打印整个列表。** ```python names.append("我在渡劫") print(f"更新后的列表为: {names}") # 添加新的元素后输出 ``` --- #### 使用循环生成特定条件下的列表 3. **不使用 `if` 语句,通过循环列表解析生成前 20 个偶数的列表。** - 方法一:使用循环 ```python list1 = [] for i in range(0, 40, 2): list1.append(i) print(f"方法一的结果为: {list1}") ``` - 方法二:使用列表解析 ```python list1 = [i for i in range(0, 40, 2)] print(f"方法二的结果为: {list1}") ``` --- #### 随机生成列表 4. **将 0 至 10 的随机整数存入列表中,并打印最终结果。** ```python import random ls = [] # 初始化空列表 for _ in range(10): # 循环十次 num = random.randint(0, 10) # 获取随机数 ls.append(num) # 将随机数加入到列表中 print(f"随机生成的列表为: {ls}") ``` --- #### 复杂逻辑处理 5. **输入一个正整数 `n`,按照给定规则将其转换成一系列数值,并存储在一个列表中。** - 如果 `n == 1`,返回 `[1]`; - 如果 `n` 是偶数,则返回 `n // 2`; - 如果 `n` 是奇数,则返回 `3 * n + 1`。 实现如下: ```python def generate_sequence(n): sequence = [n] while n != 1: if n % 2 == 0: n //= 2 else: n = 3 * n + 1 sequence.append(n) return sequence result = generate_sequence(int(input("请输入一个正整数: "))) print(f"生成的序列为: {result}, 序列长度为: {len(result)}") ``` --- #### 去重与统计 6. **去除列表中的重复项(提供两种实现方式)。** - 方法一:利用集合去重后再转回列表 ```python original_list = [1, 2, 3, 2, 4, 3, 5] unique_list = list(set(original_list)) print(f"方法一的结果为: {unique_list}") ``` - 方法二:手动遍历过滤 ```python original_list = [1, 2, 3, 2, 4, 3, 5] unique_list = [] for item in original_list: if item not in unique_list: unique_list.append(item) print(f"方法二的结果为: {unique_list}") ``` --- #### 数学应用 7. **找到 50 至 150 范围内的所有质数,并存储在列表中。** ```python def is_prime(num): if num < 2: return False for i in range(2, int(num**0.5)+1): if num % i == 0: return False return True primes = [num for num in range(50, 151) if is_prime(num)] print(f"范围内的质数为: {primes}") ``` 8. **计算列表的最大值、最小值、平均值和总和(不允许使用内置函数)。** ```python numbers = [10, 8, 5, 3, 27, 99] max_value = min_value = numbers[0] total_sum = 0 for num in numbers: if num > max_value: max_value = num if num < min_value: min_value = num total_sum += num average = total_sum / len(numbers) print(f"最大值为: {max_value}[^5]") print(f"最小值为: {min_value}") print(f"总和为: {total_sum}") print(f"平均值为: {average:.2f}") ``` --- #### 特殊场景模拟 9. **猜拳游戏——石头、剪刀、布。** ```python import random choices = ['石头', '剪刀', '布'] user_choice = input("请选择 (石头/剪刀/布): ") computer_choice = random.choice(choices) print(f"电脑选择了: {computer_choice}") if user_choice == computer_choice: print("平局!") elif (user_choice == '石头' and computer_choice == '剪刀') or \ (user_choice == '剪刀' and computer_choice == '布') or \ (user_choice == '布' and computer_choice == '石头'): print("你赢了!") else: print("你输了!") ``` ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值