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

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. typedef的用法和相关问题

    用了C和C++这么久,今天才仔细研究了下typedef的用法,真的是惭愧啊,不过基础都是不断巩固的啊. typedef 在计算机编程语言中用来为复杂的声明定义简单的别名,与宏定义有些差异.它本身是一种 ...

  2. guess-number-higher-or-lower

    // Forward declaration of guess API. // @param num, your guess // @return -1 if my number is lower, ...

  3. 第二章 Javac编译原理

    注:本文主要记录自<深入分析java web技术内幕>"第四章 javac编译原理" 1.javac作用 将*.java源代码文件转化为*.class文件 2.编译流程 ...

  4. Java JDBC数据库链接

    好久没有编写有关数据库应用程序啦,这里回顾一下java JDBC. 1.使用Java JDBC操作数据库一般需要6步: (1)建立JDBC桥接器,加载数据库驱动: (2)连接数据库,获得Connect ...

  5. oralce sql 分页

    create table student ( sid varchar2(10), --学号 sname varchar2(10), --姓名 classid varchar2(10), --班级号 s ...

  6. Android的硬件抽象层模块编写规范

    硬件抽象层模块编写规范 ​ Android系统的硬件抽象层以模块的形式来管理各个硬件訪问接口.每个硬件模块都相应有一个动态链接库文件.这些动态链接库文件的命令须要符合一定的规范.同一时候,在系统内部. ...

  7. Eclipse中SVN修改的*星号没了,解决方法

    Eclipse中SVN修改的*星号没了,解决方法 打开Preference 第一步:去掉外加的 ">" 第二步:勾选Outgoing changes 这样做之后," ...

  8. UVA 357 Let Me Count The Ways(全然背包)

    UVA 357 Let Me Count The Ways(全然背包) http://uva.onlinejudge.org/index.php?option=com_onlinejudge& ...

  9. caffe 代码阅读笔记1

    首先查看caffe.cpp里的train函数: // Train / Finetune a model. //训练,微调一个网络模型 int train() { // google的glog库,检查- ...

  10. Hibernate学习笔记(十) — HQL查询

    一.HQL的一对多查询 班级(1)->(多)学生 /** * 实现Classes与Student的内连接 * * SELECT c.*,s.* * from classes c INNER JO ...