标签: iterable-unpacking

如何生成预先解压缩的列表?

我有一个在itertools.groupby操作中创建的列表:

def yield_unpacked_list():
    for key, grp in itertools.groupby(something_to_groupby, key=lambda x: x[0]):
        subset_of_grp = list(item[2] for item in list(grp))
        yield key, subset_of_grp
Run Code Online (Sandbox Code Playgroud)

例如,如果subset_of_grp结果是[1, 2, 3, 4][5, 6, 7, 8]:

for m in yield_unpacked_list():
    print m
Run Code Online (Sandbox Code Playgroud)

打印出来:

('first_key', [1, 2, 3, 4])
('second_key', [5, 6, 7, 8])
Run Code Online (Sandbox Code Playgroud)

现在,回到我的函数定义.显然以下是语法错误(*运算符):

def yield_unpacked_list():
    for key, grp in itertools.groupby(something_to_groupby, key=lambda x: x[0]):
        subset_of_grp = list(item[2] for item in list(grp))
        yield key, *subset_of_grp
Run Code Online (Sandbox Code Playgroud)

我希望同一 print循环的以下结果不带 …

python yield group-by python-itertools iterable-unpacking

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

大多数pythonic方式'或'元组?

我有一个方法返回一个布尔值的三元素元组,我在循环中调用它.我想最终得到一个包含or单个元组结果的三元素元组.如果该方法只返回一个布尔值,它将只是:

result = False
for j in some_list: # there is more processing in the loop, omitted
    result |= method(j)
return result
Run Code Online (Sandbox Code Playgroud)

我可以用一些优雅的方式或method()现在返回的元组来概括它吗?我当然可以这样做:

result = False, False, False
for j in some_list:
    res1, res2, res3 = method(j)
    result = res1 | result[0], res2 | result[1], res3 | result[2]
return result
Run Code Online (Sandbox Code Playgroud)

但似乎有点不雅.

编辑:澄清我想在两种情况下返回结果 - 首先是布尔值,然后是布尔值元组

python tuples python-2.7 iterable-unpacking

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

C中的"拆包"

我正在改写剧本从蟒蛇Ç.我对C.比较新.

我在PYTHON中有一个包含这个值的变量:

x = [chr(113),chr(80),chr(191),chr(70)]

y = "".join(x)
Run Code Online (Sandbox Code Playgroud)

这将返回y的这个值:

y = qP¿F           #this is string
Run Code Online (Sandbox Code Playgroud)

现在我要解压缩这个变量,将它存储到变量z以获得我想要的结果.像这样:

z = struct.unpack("<f",y)
print z[0]  #unpack returns a tuple of size 1
Run Code Online (Sandbox Code Playgroud)

我得到的价值是:

x = 24488.2207
Run Code Online (Sandbox Code Playgroud)

这对我来说是正确的.

我想知道C中是否有相同的功能可用于此?

c python unpack iterable-unpacking

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

为什么逗号分隔的iterables for for不能像zip那样工作?

我想了解的是为什么以下代码

for x, y in [1,2], [3,4]:
    print(x, y, x + y)
Run Code Online (Sandbox Code Playgroud)

版画

1 2 3
3 4 7
Run Code Online (Sandbox Code Playgroud)

代替

1 3 4
2 4 6
Run Code Online (Sandbox Code Playgroud)

现在,我知道zip可以完成这项工作并且不使用zip来迭代一对列表可以被认为是反模式,但我仍然需要对此默认行为进行解释.

从我的角度来看,上面的代码应该像内置的zip函数一样直观地工作

for (x, y) in zip([1,2], [3,4]):
    print(x, y, x + y)
Run Code Online (Sandbox Code Playgroud)

打印

1 3 4
2 4 6
Run Code Online (Sandbox Code Playgroud)

从记忆中我记得很久以前就看过这种技术的解释了(我猜这就是为什么首先想到这个解决方案),但我现在已经完成了搜索,包括整篇Python 3文档的第5部分,但我无法做到找不到这种行为的任何解释,甚至在第5.6节也没有.(循环技术).

这是第四次陷入困境吗?

python python-3.x iterable-unpacking

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

压缩一个空的可迭代对象

我想遍历一个元组的迭代并将每个值存储在一个新变量中。我可以使用zip来做到这一点: x, y = zip(*enumerate(range(0,30,5)))

但这在iterable为空的情况下不起作用

x, y = zip(*enumerate(range(0,-1,5)))
Traceback (most recent call last):
  File "C:\Python36\lib\site-packages\IPython\core\interactiveshell.py", line 3267, in run_code
    exec(code_obj, self.user_global_ns, self.user_ns)
  File "<ipython-input-35-76960294a673>", line 1, in <module>
    x, y = zip(*enumerate(range(0,-1,5)))
ValueError: not enough values to unpack (expected 2, got 0)
Run Code Online (Sandbox Code Playgroud)

因为zip返回一个空的Iterable,而不是包含两个空列表的Iterable

如何处理iterable为空的情况?

python iterable-unpacking

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

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

将元组转换为列表的最 Pythonic 方法,在每个现有元素之后添加新元素

问题可能会令人困惑,所以这里有一个例子:

我想从一个 tuple like(a, b, c)到一个表单列表[a, 1, b, 1, c, 1]。什么是最 Pythonic 的方式来做到这一点?我尝试了类似的东西[*(x, 1) for x in list],然后才意识到您无法在列表理解中解包。做到这一点的最佳方法是什么?我已经搜索了一段时间,找不到任何有用的东西。

python tuples list-comprehension iterable-unpacking

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

这个表达式有什么作用:(x, y) = (y, x % y)?

我看到下面的代码,但不知道它做什么。

(x, y) = (y, x % y)
Run Code Online (Sandbox Code Playgroud)

一开始我认为它在下面做:

x=y
y=x%y
Run Code Online (Sandbox Code Playgroud)

但我发现我不对。有人可以解释一下是什么 (x, y) = (y, x % y)吗?

python python-3.x iterable-unpacking

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

列表嵌套列表的操作

我有以下列表:

list = [(1,info1),(2,info2),(3,info3)...]
Run Code Online (Sandbox Code Playgroud)

每个信息都由一个元组列表组成

info1 = [(a1,b1,c1),(a1',b1',c1'),(a1",b1",c1")...]
Run Code Online (Sandbox Code Playgroud)

对于每个元素list,我想要有以下内容:

otherlist = [(1,(a1,b1,c1)),(1,(a1',b1',c1')),(1,(a1",b1",c1"))...]
Run Code Online (Sandbox Code Playgroud)

也就是说:前面的索引info要放在每个信息元组的前面

我认为这是可行的,但我无法用简单的列表理解来实现这一点

谢谢您的帮助 :)

python list iterable-unpacking

0
推荐指数
1
解决办法
96
查看次数

有没有像 Python 一样的 Haskell 等价的可迭代解包方式?

我想知道是否可以从 Haskell 中的可迭代事物中创建变量。我在搜索时发现了这个,但我无法适应我的情况。也许这是不可能的,或者我错过了一些东西,因为我是初学者。基本上,我想知道在 Haskell 中是否有可能发生这样的事情:

>>> list_of_lists = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
>>> a, b, c = list_of_lists
>>> print(a)
[1, 2, 3]
Run Code Online (Sandbox Code Playgroud)

python haskell iterable-unpacking

0
推荐指数
1
解决办法
127
查看次数