仍在因处理一大批数据备受头疼困扰吗, 仍然在运用笨拙方法逐个去执行添加以及删除元素操作吗, 今日, 我们就来完全地拆解其中那个具备无所不能特性的“百宝箱”也就是列表, 别觉得你知晓几个诸如pop之类的方法就自认为很了不起了, 其内里所蕴含的门道, 简直太多了!
从零开始,打造你的第一个列表
能够创建列表吗? 那简直是轻而易举的事情!只需要运用一对方括号, 将各类事物放置进去, 如此便大功告成了。不管是数字, 还是文字段落, 甚至是另外一个列表, 它不会拒绝任何东西, 可以全部收纳进去。
my_first_list = []一个空荡荡的列表,等待被填满
=
'苹果', '牛奶', '面包', 12.5
看,不同类型也能和平共处
=
列表里面套列表,玩的就是心跳
但等等,你以为只有这一种方法?`list()`函数微微一笑,深藏功与名。它能把字符串、元组这些“顽固分子”,通通转化成听话的列表。 ```python list_from_string = list("Hello")结果:
'H', 'e', 'l', 'l', 'o'
**记住,列表是“可变”的**,这意味着你创建之后,可以随时对它“动手术”,想改就改,想加就加。这和它的亲戚“元组”可完全不一样。精准定位,切片就像切蛋糕
对于列表之中的每一个元素而言, 其均具备自身那一被称作索引的“门牌号”, 然而于此存在着一个需万分留意的大坑, 即: 计数乃是自0起始展开的情形!首个元素所对应的索引是0, 而非就是1!
fruits = ['香蕉', '橙子', '葡萄', '西瓜'] print(fruits[0])输出:'香蕉'
print()
输出:'西瓜' (负数索引从末尾开始,-1是最后一个)
想一次拿好几个?切片满足你!语法是`[开始:结束:步长]`。记住一个口诀:**“顾头不顾尾”**。结束位置的元素,是拿不到的。 ```python numbers = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] print(numbers[2:5])输出: (取索引2到4,不包括5!)
print()
输出: (从头开始,取到索引2)
print()
输出:
0, 2, 4, 6, 8
(步长为2,隔一个取一个)
print()
输出:
9, 8, 7, 6, 5, 4, 3, 2, 1, 0
(神操作!列表反转)
**切片不会修改原列表**,它只是原列表的一个“快照”或“副本”。想要修改原列表,你得用别的方法。增删改查,玩转列表的四大法宝
有的事物之所以强大, 是由于其具备一系列、全方位一应俱全的“方式手段”。若能恰当运用, 那么使用者便成为掌控数据的神奇变幻之术践行者。
添加元素:让列表“长大”
这段提供的内容似乎存在一些混淆。请明确准确的完整陈述以便我能按照要求进行精确改写。
nums 变为 nums.(4, 5)# 不对!没办法一次添加两个。
`extend(iterable)`:**胃口更大**!把另一个列表(或可迭代对象)里的所有元素,一个个拆开,接到末尾。 ```python nums = [1, 2] nums.extend([3, 4, 5])nums 变成
1, 2, 3, 4, 5
`insert(index, item)`:**精准插入**!在指定的索引位置前面,插入一个新元素。 ```python nums = [1, 3] nums.insert(1, 2)在索引1(也就是3)的前面插入2,nums变成
**删除元素:给列表“瘦身”** `remove(item)`:**按值删除**。找到第一个匹配的元素,把它扔掉。如果元素不存在?会报错! ```python pets = ['猫', '狗', '仓鼠', '狗'] pets.remove('狗')只删除第一个‘狗’,pets变成
'猫', '仓鼠', '狗'
`pop(index)`:**按位删除**。删除指定索引位置的元素,并且**把这个被删除的元素还给你**!如果不指定索引,默认删除最后一个。 ```python nums = [10, 20, 30, 40] last_item = nums.pop()是40,nums变成
10, 20, 30
= nums.pop(1)
是20,nums变成
**其他必备技能** `index(item)`:查找某个元素第一次出现的索引。 `count(item)`:数一数某个元素在列表里出现了几次。 `sort()`:让列表里的元素排队站好(默认升序)。`reverse()`:让整个列表头尾颠倒。 **重要警告**:`append`和`extend`,`remove`和`pop`,名字像,但干的活完全不同,可别搞混了!列表推导式,一行代码的优雅魔法
要是你此刻仍旧借助for循环吭哧吭哧地去创建全新的列表, 那你可就落伍了!实际上啊, 列表推导式才是那种无比优雅的写代码方式, 它具备这样的能力, 能够将循环以及条件判断, 统统进行压缩, 最终形成一行既清晰又容易被理解明白的代码。
基本结构:
表达式 for 变量 in 可迭代对象 if 条件
传统方法:生成0-9的平方列表
将会, 针对处于范围为十的情况中的每一个i, 进行, 对i的平方进行某种操作。
列表推导式:一行搞定!
=
i**2 for i in range(10)
这还没完,它还能玩出花: ```python只留下偶数
evens =
i, 置于i于范围20之中, 倘若i除以2取余数等于0。
把列表里所有字符串变成大写
words =
'hello', 'world', ''
=
将 words 中的每个 word, 进行 upper() 操作 , 标点符号。
甚至嵌套循环!
pairs =
对于x, 在某个范围内, 对于y, 在某个范围内, 当x不等于y时, 存在(x, y)。
**列表推导式不仅代码简洁,执行效率也往往更高**。但切记,如果逻辑太复杂,硬塞进一行推导式反而会降低可读性,这时候老老实实用`for`循环更好。实战演练,检验你是不是真懂了
光说不练假把式,下面几个小挑战,动手试试看!
挑战一:数据清洗 你从网上扒下来一个成绩列表: =
85, 存在缺考情况,92, 78, 出现作弊现象, 88, 95。
要撰写代码, 将所有不是数字的元素给过滤掉, 并且去计算剩余有效成绩的平均分数。
挑战二:矩阵转置 给你一个二维列表(矩阵): =
, ,
运用列表推导式, 在不使用任何复杂库的情况下, 将其进行转置, 也就是让行变成列, 列变成行, 进而得到。
挑战三:趣味排序 有一个学生信息列表: =
'小明', 88
'小红', 92
'小刚', 85
'小美', 92
将成绩依据从高到低的顺序予以排列, 如果成绩是一样的, 那么便按照名字的字母顺序以升序的方式进行排列, 最终所呈现的结果应该是。
'小红', 92
'小美', 92
'小明', 88
'小刚', 85
(提示:想想sort()方法的key参数和表达式)
列表这个在数据结构里最为基础且最为灵活的东西, 宛如你编程工具箱当中的瑞士军刀。它从简单的数据存储开始, 一直到复杂的数据变换, 几乎在各个地方都能见到它的身影。今天所讲的这些内容, 足够你花费一段时间去消化了。然而不要停下脚步, 赶紧打开你的代码编辑器, 将上面所提到的例子以及练习都逐一进行敲击。只有当你的手指头记住了, 知识才真正属于你。
那真正称得上高手之人, 并非是知晓了数量众多且极为酷炫的概念, 而是能够将名为“列表”的这种基础工具, 运用到那般出神入化的境地。而你的这段旅程, 才不过刚刚方才起始。