Python编程语言有哪些鲜为人知但有用的功能?
我有这个嵌套列表:
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.
任何解决方案,将非常感谢解释.谢谢!
理解与范围界定有一些意想不到的相互作用.这是预期的行为吗?
我有一个方法:
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)
冒着抱怨的风险,这是一个残酷的错误来源.当我编写新代码时,我偶尔会发现由于重新绑定而导致非常奇怪的错误 - 即使现在我知道这是一个问题.我需要制定一个规则,比如"总是用下划线列出列表推导中的临时变量",但即使这样也不是万无一失的.
这种随机定时炸弹等待的事实否定了列表理解的所有"易用性".
vec = [[1,2,3], [4,5,6], [7,8,9]]
print [num for elem in vec for num in elem] <----- this
>>> [1, 2, 3, 4, 5, 6, 7, 8, 9]
Run Code Online (Sandbox Code Playgroud)
这是骗我的.
我的理解是ELEM名单从内部列表for elem in vic
我不太明白的用法num,并for num in elem在开始和结束.
python如何解释这个?
它看起来的顺序是什么?
试图枚举某个目录中的所有文件(如Linux中的"find."或Windows中的"dir/s/b").
我想出了以下嵌套列表理解:
from os import walk
from os.path import join
root = r'c:\windows' #choose any folder here
allfiles = [join(root,f) for f in files for root,dirs,files in walk(root)]
Run Code Online (Sandbox Code Playgroud)
不幸的是,对于最后一个表达式,我得到:
NameError: name 'files' is not defined
与此问题相关,哪个(虽然有效)我无法理解嵌套列表理解的语法.
我仍然学习python,但这段代码似乎超出了我的水平.这是什么意思?
pairs = [s2 for s1 in qs.split('&') for s2 in s1.split(';')]
Run Code Online (Sandbox Code Playgroud) 定义由整数组成的元组(其中每个项目出现的次数已知)有哪些好方法?
例如,
我想定义一个元组,其中 3 个 2、2 个 4 和 1、3、5 出现一次。
为此,我始终可以采用手动方式:
foo = (1, 2, 2, 2, 3, 4, 4, 5)
Run Code Online (Sandbox Code Playgroud)
但是,当列表中的项目数量很大时,这会变得有点混乱。因此,我想知道有哪些方法可以自动执行生成每个项目所需数量的重复项的任务。
我有一个字典 -
a = {'b': [1,2,3], 'c':[4,5,6]}
Run Code Online (Sandbox Code Playgroud)
我只想使用list comprehension来实现这个输出 -
[['c', 4], ['c', 5], ['c', 6], ['b', 1], ['b', 2], ['b', 3]]
Run Code Online (Sandbox Code Playgroud)
一个简单的for循环完成它 -
x = []
for k, v in a.iteritems():
for i in v:
x.append([k, i])
Run Code Online (Sandbox Code Playgroud)
试图将其转换为列表理解,我这样做 -
[[k,i] for i in v for k, v in a.items()]
Run Code Online (Sandbox Code Playgroud)
但奇怪的是,我得到了一个输出
[['c', 1], ['b', 1], ['c', 2], ['b', 2], ['c', 3], ['b', 3]]
Run Code Online (Sandbox Code Playgroud)
什么应该是正确的列表理解,为什么我的列表理解不起作用?
我需要三个正整数的每个组合,总和为1000.
这是我的尝试,但我不确定这是否正确,因为我无法验证它.
def getSum():
l = []
for x in range(1, 999):
total = 1000-x
for y in range(1, 999):
total = total-y
if total>0:
l.append([x, y, total])
return l
print len(getSum())
Run Code Online (Sandbox Code Playgroud)
我得到了28776种不同的组合.那是对的吗?
python ×9
algorithm ×1
binding ×1
indexing ×1
list ×1
nested ×1
python-2.7 ×1
python-3.x ×1
tuples ×1