Python 将列表中的每个值都加一要怎么做?(列表解析式)

Python 如何修改列表中的每一个值

前言

  • 本人Python小菜鸡,新手一枚,分享自己平时学习的笔记内容
  • 写的不好还请见谅,欢迎大佬指点不足
    在这里插入图片描述

三种方法:

思维导图

在这里插入图片描述

  • 现在有个需求,现有列表a=[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
  • 要求你把列表里的每个值加1,或者算2的平方

一、最二的写法

生成一个新列表,遍历原列表 a , 把每个值加 1 后存在新列表里,最后再把新列表替换掉原来的列表
为什么说二呢? 因为生成了新列表,浪费了内存空间。

def one():
    """
    最不好的写法,但比较容易理解,生成新列表占用内存
    :return: None
    """
    a = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
    b = []
    for i in a:
        b.append(i+1)
    print(b)

二、标准的写法

为标准的写法,不生存新列表,而是通过列表索引改列表中的内容

def two():
	"""
    标准的写法,利用列表索引更改值
    :return: None
    """
    a = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
    for i,k in enumerate(a):
        a[i]=k+1
    print(a)

enumerate() 函数用于将一个可遍历的数据对象(如列表、元组或字符串)组合为一个索引序列,同时列出数据和数据下标,一般用在 for 循环当中。

三、高级的写法

使用匿名函数lambad对列表数据进行循环处理,代码只有简单的三行

def three():
    """
    使用 lambda 匿名函数 对列表中的数据进行处理
    :return: None
    """
    a = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
    a = map(lambda x:x+1,a)
    print(a)

这里是引用这边返回结果是内存地址,如果想将里面内容取出,需要一个循环
for i in a:print(i)
或者在map() 前面加个 list() 转化成列表输出

四、列表解析式

列表解析式 也叫 列表生成式、列表推导式
同样只有简单三行代码,比较简洁,易于理解和观看,算是一个比较常用的方法

def four():
    """
    装逼利器,使用列表解析式、生成式 对列表中的数据进行处理
    :return: None
    """
    a = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
    a = [i+1 for i in a]
    print(a)

扩展

在写这几种方法的时候,我想到比较这几种写法的处理速度,于是我尝试计算了一下代码运行时间
但处理速度过快,显示不出这么低的数值,只好用了一下 time工具包里的 sleep 延迟了一下代码运行
但结果都差不多,应该是我处理的数据过于简单,比较不出来

参考代码

# -*- coding:utf-8 -*-
"""现在有个需求,现有列表a=[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
要求你把列表里的每个值加1
"""
import time


def time_count(funx):
    def inner(*args, **kwargs):
        start = time.time()
        time.sleep(1)
        ret = funx(*args, **kwargs)
        end = time.time()
        print("程序运行时间为(越小越好):", end - start)
        return ret
    return inner


@time_count
def mode_one():
    """
    最不好的写法,但比较容易理解,生成新列表占用内存
    :return: None
    """
    nums = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
    newnums = []
    for i in nums:
        newnums.append(i+1)
    return newnums


@time_count
def mode_two():
    """
    标准的写法,利用列表索引更改值
    :return: None
    """
    nums = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
    for i, k in enumerate(nums):
        nums[i] = k+1
    return nums


@time_count
def mode_three():
    """
    使用 lambda 匿名函数 对列表中的数据进行处理
    :return: 默认返回 None
    """
    nums = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
    nums = list(map(lambda x: x+1, nums))
    return nums


@time_count
def mode_four():
    """
    装逼利器,使用列表解析式、生成式 对列表中的数据进行处理
    :return: 默认返回 None
    """
    nums = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
    nums = [i+1 for i in nums]
    return nums


@time_count
def mode_five():
    """
    列表生成式当然还能用来干其他事情,比如这里,我们将所有水果的单词改成首字母大写
    :return: 默认返回 None
    """
    fruit = ["apple", "pear", "banana", "watermelon"]
    fruit = [i.title() for i in fruit]
    return fruit


print(mode_one())
print(mode_two())
print(mode_three())
print(mode_four())
print(mode_five())

结果截图

笔记文件链接

>_<点我下载笔记~

相关博客

Python 简单实现 斐波拉契数列 几种方式
Python 列表与字典 排序 的奇妙之旅

  • 68
    点赞
  • 151
    收藏
    觉得还不错? 一键收藏
  • 6
    评论
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值