V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐学习书目
Learn Python the Hard Way
Python Sites
PyPI - Python Package Index
http://diveintopython.org/toc/index.html
Pocoo
值得关注的项目
PyPy
Celery
Jinja2
Read the Docs
gevent
pyenv
virtualenv
Stackless Python
Beautiful Soup
结巴中文分词
Green Unicorn
Sentry
Shovel
Pyflakes
pytest
Python 编程
pep8 Checker
Styles
PEP 8
Google Python Style Guide
Code Style from The Hitchhiker's Guide
lin
V2EX  ›  Python

帮我弟弟问:如果我有个list a = ["a", "b", "c", "a", "b", "c"],有没有什么moudle 可以把 所有的 "a" 替换成 10?

  •  
  •   lin ·
    Quasimo · 2011-07-11 15:32:58 +08:00 · 7537 次点击
    这是一个创建于 4914 天前的主题,其中的信息可能已经有所发展或是发生改变。
    28 条回复    1970-01-01 08:00:00 +08:00
    kidblg
        1
    kidblg  
       2011-07-11 15:44:46 +08:00
    list貌似没有这样的方法。

    一个猥琐的方法是:
    s1 = "a"
    s2 = 10
    a = [s2 if s == s1 else s for s in a]
    bcxx
        2
    bcxx  
       2011-07-11 16:11:16 +08:00
    就用 for 循环逐个改好了,反正也是 O(n)

    坐等更加 geek 的方法……
    Weakdancer
        3
    Weakdancer  
       2011-07-11 16:13:02 +08:00
    直接这样:

    for i in a:
    ++++if i=="a":
    ++++++++a[a.index("a")]=10

    一般情况下,我使用楼上的写法,更简洁,但是好像低版本的python不支持。
    raptium
        4
    raptium  
       2011-07-11 16:37:18 +08:00
    b = map(lambda x:10 if x == 'a' else x, a)

    不过这样得到的是个新的 就不是替换了~~
    ccp0101
        5
    ccp0101  
       2011-07-11 17:05:02 +08:00
    a_list = ["a", "b", "c", "a", "b", "c"]

    for (i, item) in enumerate(a_list):
    if item == "a":
    a_list[i] = 10

    print a_list # [10, 'b', 'c', 10, 'b', 'c']
    gastlygem
        6
    gastlygem  
       2011-07-11 17:14:07 +08:00
    @kidblg +1

    还有比 listcomp + inline if/else 更 Pythonic 的吗?
    felinx
        7
    felinx  
       2011-07-11 17:46:12 +08:00
    再精简一下好了,就一行,a = ["10" if s == "a" else s for s in a]
    CoX
        8
    CoX  
       2011-07-11 17:48:20 +08:00
    一行:[(s,10)[s=='a'] for s in a]
    CoX
        9
    CoX  
       2011-07-11 17:50:30 +08:00
    [(s,10)[s is 'a'] for s in a]
    dimlau
        10
    dimlau  
       2011-08-10 14:57:31 +08:00
    @CoX 纠结了好久,还是弱弱滴问一下,这个是什么语法?可以给个文档链接么?谢谢。
    Livid
        11
    Livid  
    MOD
       2011-08-10 15:00:20 +08:00
    @lin 为什么不让你弟弟直接上 V2EX 和大家交流呢?
    est
        12
    est  
       2011-08-10 15:19:30 +08:00
    @dimlau False其实就是取list第0个元素,True取第1个。


    >>> [1,2,3,4][True]
    2

    其实等于

    >>> [1,2,3,4][int(True)]
    2
    dimlau
        13
    dimlau  
       2011-08-10 15:23:20 +08:00
    @est 哦,我开始看 Python 的书没多久,您一解释我就懂了,但是自己想不出来 ……
    谢谢。
    bhuztez
        14
    bhuztez  
       2011-08-10 15:25:10 +08:00
    @Livid 我邪恶地猜想他弟弟就是他
    lin
        15
    lin  
    OP
       2011-08-10 16:27:59 +08:00
    @Livid 我跟他说过。他平常混百度贴吧。我弟弟叫 Jamgaroo1 回头我再跟他说说。他总是好多“思考”,比如这次:一个数除以2,除多少次能除得等于1。

    @bhuztez 我本来就不懂编程啊,问这些有什么不好意思的?我不止于cosplay我弟弟这么无聊。
    kuno
        16
    kuno  
       2011-08-10 17:29:57 +08:00
    @lin
    你弟弟的开发方法有问题。
    这样的问题通常python coder会开一个python shell, 在里面实验各种可能的方案,然后选择一个最优的。
    这可能也是python这样的动态语言最大的优势了。
    lin
        17
    lin  
    OP
       2011-08-11 11:17:35 +08:00
    @kuno 我不太明白,这条问题是我在他知乎上转的
    http://www.zhihu.com/question/19761639

    他一般用IDLE直接写然后运行或者写成py文件进行测试。

    很多时候他想到一个问题但是不知道用怎样的逻辑(是不是应该叫算法)去解决,通常是一些数学问题但是这些问题在他平常的学习范围之外,有些概念我都没听过(可能以前学过但忘了),他下学期上初三。
    lin
        18
    lin  
    OP
       2011-08-11 11:18:20 +08:00
    另外,感谢以前V2EX大家推荐的书。
    EricZ
        19
    EricZ  
       2011-08-11 13:25:37 +08:00
    @lin 你弟弟很会思考呢!如果是数学问题的话不用太关注编程的小细节,清晰的代码更能显示逻辑。Python也不是perl~
    kuno
        20
    kuno  
       2011-08-11 13:52:13 +08:00
    你弟弟目前最重要的是学好数学啊,至于我说的都是具体的开发方法论的范畴,而且只是经验之谈。
    看起来不适合你弟弟目前的情况。

    --祝好
    lanisle
        21
    lanisle  
       2011-08-11 15:29:06 +08:00
    第一个感觉LZ的弟弟就是他自己。。。
    lin
        22
    lin  
    OP
       2011-08-11 15:52:36 +08:00
    果断地用了两次“屏蔽此人”
    noproblem
        23
    noproblem  
       2011-08-11 21:24:31 +08:00
    @lin 鉴于令弟的年纪唠叨两句:
    从编程入门的角度来说,python 真的不太合适
    python确实很酷,但上来就用这种语言的话 会阻碍编程基础能力的锻炼

    初学者应当使用没有高级数据结构的命令式程序设计语言
    c是可以接受的(且在国内已被广范接受),pascal更是不辱使命(当初的设计目的就是教学)
    lanisle
        24
    lanisle  
       2011-08-11 21:45:18 +08:00 via iPod
    @lin 屏蔽我?你这和中宣部有啥区别~
    bhuztez
        25
    bhuztez  
       2011-08-11 22:32:17 +08:00
    @noproblem ,我模仿你一下

    从编程入门的角度来说,C 真的不太合适
    C 确实很酷,但上来就用这种语言的话 会阻碍编程基础能力的锻炼

    初学者应当使用没有高级控制结构的贴近机器的底层语言
    汇编是可以接受的,直接写机器码更好
    noproblem
        26
    noproblem  
       2011-08-11 23:27:50 +08:00
    @bhuztez 呵呵,倒不能延伸到那个地步
    EricZ
        27
    EricZ  
       2011-08-12 00:14:18 +08:00
    @noproblem 我倒觉得lin的弟弟更喜欢数学多余喜欢编程,还是用上手快的语言好。
    coderx
        28
    coderx  
       2011-08-12 13:32:28 +08:00
    map(lambda x: x == 'a' and 10 or x, a)
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   5369 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 28ms · UTC 09:16 · PVG 17:16 · LAX 01:16 · JFK 04:16
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.