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

2011-07-11 15:32:58 +08:00
 lin
7346 次点击
所在节点    Python
28 条回复
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
2011-07-11 16:11:16 +08:00
就用 for 循环逐个改好了,反正也是 O(n)

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

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

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

不过这样得到的是个新的 就不是替换了~~
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
2011-07-11 17:14:07 +08:00
@kidblg +1

还有比 listcomp + inline if/else 更 Pythonic 的吗?
felinx
2011-07-11 17:46:12 +08:00
再精简一下好了,就一行,a = ["10" if s == "a" else s for s in a]
CoX
2011-07-11 17:48:20 +08:00
一行:[(s,10)[s=='a'] for s in a]
CoX
2011-07-11 17:50:30 +08:00
[(s,10)[s is 'a'] for s in a]
dimlau
2011-08-10 14:57:31 +08:00
@CoX 纠结了好久,还是弱弱滴问一下,这个是什么语法?可以给个文档链接么?谢谢。
Livid
2011-08-10 15:00:20 +08:00
@lin 为什么不让你弟弟直接上 V2EX 和大家交流呢?
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
2011-08-10 15:23:20 +08:00
@est 哦,我开始看 Python 的书没多久,您一解释我就懂了,但是自己想不出来 ……
谢谢。
bhuztez
2011-08-10 15:25:10 +08:00
@Livid 我邪恶地猜想他弟弟就是他
lin
2011-08-10 16:27:59 +08:00
@Livid 我跟他说过。他平常混百度贴吧。我弟弟叫 Jamgaroo1 回头我再跟他说说。他总是好多“思考”,比如这次:一个数除以2,除多少次能除得等于1。

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

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

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

--祝好

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/15615

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX