相关疑难解决方法(0)


在嵌套列表上列出理解?

我有这个嵌套列表:

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.

任何解决方案,将非常感谢解释.谢谢!

python nested list-comprehension list

194
推荐指数
6
解决办法
14万
查看次数

即使在理解范围之后,列表理解也会重新命名.这是正确的吗?

理解与范围界定有一些意想不到的相互作用.这是预期的行为吗?

我有一个方法:

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)

冒着抱怨的风险,这是一个残酷的错误来源.当我编写新代码时,我偶尔会发现由于重新绑定而导致非常奇怪的错误 - 即使现在我知道这是一个问题.我需要制定一个规则,比如"总是用下划线列出列表推导中的临时变量",但即使这样也不是万无一失的.

这种随机定时炸弹等待的事实否定了列表理解的所有"易用性".

python binding list-comprehension

116
推荐指数
3
解决办法
1万
查看次数

python list comprehension double for

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如何解释这个?
它看起来的顺序是什么?

python list-comprehension

54
推荐指数
4
解决办法
3万
查看次数

os.walk嵌套列表理解

试图枚举某个目录中的所有文件(如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 list-comprehension

8
推荐指数
2
解决办法
3829
查看次数

请解释一下这个python代码的含义是什么?

我仍然学习python,但这段代码似乎超出了我的水平.这是什么意思?

 pairs = [s2 for s1 in qs.split('&') for s2 in s1.split(';')]
Run Code Online (Sandbox Code Playgroud)

python python-2.7

5
推荐指数
1
解决办法
207
查看次数

如何在 Python 元组中定义重复项?

定义由整数组成的元组(其中每个项目出现的次数已知)有哪些好方法?

例如,

我想定义一个元组,其中 3 个 2、2 个 4 和 1、3、5 出现一次。

为此,我始终可以采用手动方式:

foo = (1, 2, 2, 2, 3, 4, 4, 5)
Run Code Online (Sandbox Code Playgroud)

但是,当列表中的项目数量很大时,这会变得有点混乱。因此,我想知道有哪些方法可以自动执行生成每个项目所需数量的重复项的任务。

python indexing tuples python-3.x

4
推荐指数
1
解决办法
8097
查看次数

从列表的词典列出理解

我有一个字典 -

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)

什么应该是正确的列表理解,为什么我的列表理解不起作用?

python list-comprehension

4
推荐指数
1
解决办法
1080
查看次数

三个数字的组合总计为1000

我需要三个正整数的每个组合,总和为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 algorithm

2
推荐指数
1
解决办法
244
查看次数