编写一个函数:函数接收一个列表,将列表中所有的奇数,放到偶数之前,要求过程中不增加新的列表

def fun(*args):
    # 因为奇数放在偶数之前,标记出奇数中的偶数
    # 并将该偶数取出放在数列的最后面
    # 同时将奇数中间的偶数标记为"*"
    args_long = len(args)
    args = list(args)
    j = 0
    for i in range(args_long):
        if args[i] % 2 == 0:
            j += 1
            args.append(args[i])
            args[i] = "*"

    # 将奇数中的偶数(已经标记为*)删去
    new_args_long = len(args)
    k = 0
    for i in range(new_args_long-j-k):
        if args[i-k] == "*":
            del args[i-k]
            k +=1
    return args

print(fun(*[1,2,3,4,5,6,7,8,9]))
print(fun(*[9,8,7,6,5,4,3,2,1]))

运行

[1, 3, 5, 7, 9, 2, 4, 6, 8]
[9, 7, 5, 3, 1, 8, 6, 4, 2]

将该方案进行优化

def fun(*args):
    # 因为奇数放在偶数之前,标记出奇数中的偶数
    # 并将该偶数取出放在数列的最后面
    # 同时将奇数中间的偶数标记为"*"
    args_long = len(args)
    args = list(args)
    j = 0
    for i in range(args_long):
        if args[i-j] % 2 == 0:
            j += 1
            args.append(args[i])  #追加至列表尾部
            del args[i]           #将该位置的偶数删去
    return args

print(fun(*[1,2,3,4,5,6,7,8,9]))    #[1, 3, 5, 7, 9, 2, 4, 6, 8]
print(fun(*[9,8,7,6,5,4,3,2,1]))    #[9, 7, 5, 3, 1, 8, 6, 4, 2]

问题当没有 args = list(args) 这段代码

Traceback (most recent call last):
  File "t12.py", line 14, in <module>
    print(fun(*[1,2,3,4,5,6,7,8,9]))    #[1, 3, 5, 7, 9, 2, 4, 6, 8]
  File "t12.py", line 10, in fun
    args.append(args[i])  #追加至列表尾部
AttributeError: 'tuple' object has no attribute 'append'

会直接报错。

报错原因是 元组 没有 append 属性。

元组?

实际上,虽然我们是实参传入的是列表,但是再函数调用后将其作为元组进行运算;所以必须进行类型转换。

python练习笔记——用函数对列表奇偶分类,且过程不增加新列表的更多相关文章

  1. Python学习笔记之函数

    这篇文章介绍有关 Python 函数中一些常被大家忽略的知识点,帮助大家更全面的掌握 Python 中函数的使用技巧 1.函数文档 给函数添加注释,可以在 def 语句后面添加独立字符串,这样的注释被 ...

  2. Python学习笔记_week3_函数

    一.介绍 1.面向对象(华山派)--->类(独门秘籍)--->class(定义的关键字) 2.面向过程(少林派)--->过程--->def 3.函数式编程(逍遥派)---> ...

  3. Python学习笔记 - day6 - 函数

    函数 函数在编程语言中就是完成特定功能的一个词句组(代码块),这组语句可以作为一个单位使用,并且给它取一个名字.可以通过函数名在程序的不同地方多次执行(这叫函数的调用).函数在编程语言中有基本分为:预 ...

  4. 小甲鱼:Python学习笔记003_函数

    >>> # 函数>>> def myFirstFunction(params1,params2...): print("这是我的第一个函数!") ...

  5. python学习笔记(九)函数返回多个值,列表生成式,循环多个变量,入参格式声明

    一.函数返回多个值 1.函数如果返回多个值的话,它会把这几个值放到一个元组里面2.函数如果返回多个值的话,也可以用多个变量来接收 def say(): num1 = num2 = num3 = ret ...

  6. python学习笔记(4)--函数

    1.函数 函数是指将一组语句的集合通过一个名字封装起来.要想执行这个函数,只需调用其函数名即可. 函数的特性: 1.减少重复代码 2.使程序变的课扩展 3.使程序变得易维护 语法定义: def pri ...

  7. python学习笔记之函数的参数

    函数的参数有位置参数和关键字参数,位置参数一定要在关键字参数的前面,位置参数的优先级是高于关键字参数的,否则会报错 def my_abs(a,b): print(a) print(b) my_abs( ...

  8. Python学习笔记009—函数

    1. 空函数 如果想定义一个什么事也不做的空函数,可以用pass语句: def nop(): pass pass语句什么都不做,那有什么用?实际上pass可以用来作为占位符,比如现在还没想好怎么写函数 ...

  9. Python学习笔记系列——函数

    今年下半年的计划主要是Python和Mysql了,公司不方便看书和视频,就照着廖雪峰的Python网站开始看了.以下纯为个人笔记记录,若是想系统学习的小伙伴还是看这里的好一些,毕竟系统.https:/ ...

随机推荐

  1. input框设置onInput事件只能输入数字,能兼容火狐IE9

    使用onInput()事件 onInput()是 HTML5 的标准事件,对于检测 textarea, input:text, input:password 和 input:search 这几个元素通 ...

  2. C++类模板的三种特化

    说起C++的模板及模板特化, 相信很多人都很熟悉 ,但是说到模板特化的几种类型,相信了解的人就不是很多.我这里归纳了针对一个模板参数的类模板特化的几种类型, 一是特化为绝对类型: 二是特化为引用,指针 ...

  3. Android -- 重置Bitmap大小&&Bitmap转角度

    重置Bitmap大小                                                                           Bitmap bitMap = ...

  4. Reduce Task的学习笔记

    MapReduce五大过程已经分析过半了.上次分析完Map的过程,着实花费了我的非常多时间.只是收获非常大,值得了额,这次用相同的方法分析完了Reduce的过程,也算是彻底摸透了MapReduce思想 ...

  5. Android Studio 3.0 下载 使用新功能介绍

    谷歌2017发布会更新了挺多内容的,而且也发布了AndroidStudio3.0预览版,一些功能先睹为快.(英语一般,有些翻译不太好) 下载地址 https://developer.android.g ...

  6. IT创业失败案例解析 - 第一篇

    创业启示录:创业失败报告这个系列包括30多家创业公司的失败案例分析.本文就有由其中一家IT创业公司的CTO所撰写.还是那句老话,成功的故事固然非常鼓舞人心,但我们也可以从失败故事中学到很多. 以下是译 ...

  7. Android之新建项目

    最近开始接触Android,实践出真理,接下来实际创建Android应用程序. 1.启动Eclipse,依次选择 " File/New/Project... " 或 " ...

  8. Showing a tooltip

    We can provide a balloon help for any of our widgets. #!/usr/bin/python # -*- coding: utf-8 -*- &quo ...

  9. TP自动生成模块目录

    TP自动生成模块目录 例如我想在项目中增加一个AdminI模块 只需要在入口文件index.php中添加: define('BIND_MODULE','Admin'); 再访问127.0.0.1项目就 ...

  10. 解决"libc.so.6: version `GLIBC_2.14' not found",系统的glibc版本太低 {强行安装!!}

     原创,转载请注明出处,谢谢!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! 首先查看系统glibc支持的版本: strings /lib64/libc.so.6 |grep G ...