我一直在学习,工作和玩Python一年半.随着生物学家慢慢转向生物信息学,这种语言一直是我在实验室做出的所有主要贡献的核心.我或多或少地爱上了Python允许我表达漂亮解决方案的方式,以及语言的语义,允许从思想到可行代码的这种自然流动.
我想知道的是你对我在这个论坛或其他论坛中很少见到的一个问题的答案.对于那些正在改进Python的人来说,这个问题对我来说似乎很重要,但是他想知道他的下一步应该是什么.
让我总结一下我不想先问的问题;)
我想知道你的意见,是:
您将向Python熟练人员推荐哪些步骤,从学徒到大师状态(随意停止,无论您的专业知识在哪里),以便一个人不断改进,成为更好,更好的Python编码器,一步一步.SO上的一些人几乎看起来值得为他们的Python实力而敬拜,请赐教:)
我会喜欢的那种答案(但随意给读者带来惊喜:P)的格式或多或少是这样的:
我非常关心在不同的阶段知道你应该注意什么的意见,以便不断进步(当然有适当的努力).如果您来自特定的专业领域,请在此字段中讨论您认为合适的路径.
编辑:感谢您的好评,我又回到了Python改进的轨道!我真的很感激!
我有一个包含字符串的python列表变量.是否有一个python函数可以将一个传递中的所有字符串转换为小写,反之亦然,大写?
可能重复:
Python中的转置/解压缩功能
我有一个元组列表,我想将这个列表解压缩到两个独立的列表中.我正在寻找Python中的一些标准化操作.
>>> l = [(1,2), (3,4), (8,9)]
>>> f_xxx (l)
[ [1, 3, 8], [2, 4, 9] ]
Run Code Online (Sandbox Code Playgroud)
我正在寻找一种简洁和pythonic的方法来实现这一目标.
基本上,我正在寻找zip()函数的逆运算.
我有这个嵌套列表:
l = [['40', '20', '10', '30'], ['20', '20', '20', '20', '20', '30', '20'], ['30', '20', '30', '50', '10', '30', '20', '20', '20'], ['100', '100'], ['100', '100', '100', '100', '100'], ['100', '100', '100', '100']]
Run Code Online (Sandbox Code Playgroud)
现在,我想要做的是将列表中的每个元素转换为float.我的解决方案是:
newList = []
for x in l:
for y in x:
newList.append(float(y))
Run Code Online (Sandbox Code Playgroud)
但这可以使用嵌套列表理解来完成,对吗?
我所做的是:
[float(y) for y in x for x in l]
Run Code Online (Sandbox Code Playgroud)
但结果是一堆100的总和2400.
任何解决方案,将非常感谢解释.谢谢!
我有一个包含数字字符串的列表,如下所示:
numbers = ['1', '5', '10', '8'];
Run Code Online (Sandbox Code Playgroud)
我想将每个列表元素转换为整数,所以它看起来像这样:
numbers = [1, 5, 10, 8];
Run Code Online (Sandbox Code Playgroud)
我可以使用循环来完成它,如下所示:
new_numbers = [];
for n in numbers:
new_numbers.append(int(n));
numbers = new_numbers;
Run Code Online (Sandbox Code Playgroud)
它必须如此丑陋吗?我确信在一行代码中有更多的pythonic方法可以做到这一点.请帮帮我.
我只是想用一个int来划分列表中的每个元素.
myList = [10,20,30,40,50,60,70,80,90]
myInt = 10
newList = myList/myInt
Run Code Online (Sandbox Code Playgroud)
这是错误:
TypeError: unsupported operand type(s) for /: 'list' and 'int'
Run Code Online (Sandbox Code Playgroud)
我明白为什么我收到这个错误.但我很沮丧,我找不到解决方案.
还尝试过:
newList = [ a/b for a, b in (myList,myInt)]
Run Code Online (Sandbox Code Playgroud)
错误:
ValueError: too many values to unpack
Run Code Online (Sandbox Code Playgroud)
预期结果:
newList = [1,2,3,4,5,6,7,8,9]
Run Code Online (Sandbox Code Playgroud)
编辑:
以下代码给出了我的预期结果:
newList = []
for x in myList:
newList.append(x/myInt)
Run Code Online (Sandbox Code Playgroud)
但有更容易/更快的方法吗?
理解与范围界定有一些意想不到的相互作用.这是预期的行为吗?
我有一个方法:
def leave_room(self, uid):
u = self.user_by_id(uid)
r = self.rooms[u.rid]
other_uids = [ouid for ouid in r.users_by_id.keys() if ouid != u.uid]
other_us = [self.user_by_id(uid) for uid in other_uids]
r.remove_user(uid) # OOPS! uid has been re-bound by the list comprehension above
# Interestingly, it's rebound to the last uid in the list, so the error only shows
# up when len > 1
Run Code Online (Sandbox Code Playgroud)
冒着抱怨的风险,这是一个残酷的错误来源.当我编写新代码时,我偶尔会发现由于重新绑定而导致非常奇怪的错误 - 即使现在我知道这是一个问题.我需要制定一个规则,比如"总是用下划线列出列表推导中的临时变量",但即使这样也不是万无一失的.
这种随机定时炸弹等待的事实否定了列表理解的所有"易用性".
我有这样一条线:
filter(lambda x: x == 1, [1, 1, 2])
Run Code Online (Sandbox Code Playgroud)
Pylint正在显示警告:
W: 3: Used builtin function 'filter'
Run Code Online (Sandbox Code Playgroud)
这是为什么?列表理解推荐的方法是什么?
当然我可以像这样重写:
[x for x in [1, 1, 2] if x == 1]
Run Code Online (Sandbox Code Playgroud)
而且我没有收到任何警告,但我想知道是否有这样的PEP?
我有一个清单:
my_list = [1, 2, 3, 4, 5]
Run Code Online (Sandbox Code Playgroud)
如何将每个元素乘以my_list5?输出应该是:
[5, 10, 15, 20, 25]
Run Code Online (Sandbox Code Playgroud) 在使用map()处理列表时,我想在lambda内部访问项目的索引.我怎样才能做到这一点?
例如
ranked_users = ['jon','bob','jane','alice','chris']
user_details = map(lambda x: {'name':x, 'rank':?}, ranked_users)
Run Code Online (Sandbox Code Playgroud)
如何在上面的示例中获得每个用户的排名?