相关疑难解决方法(0)

如何将itertools.product应用于列表列表的元素?

我有一个数组列表,我想获得数组中元素的笛卡尔积.

我将用一个例子来说明这个更具体......

itertools.product似乎可以做到这一点,但我陷入了一些细节.

arrays = [(-1,+1), (-2,+2), (-3,+3)];
Run Code Online (Sandbox Code Playgroud)

如果我做

cp = list(itertools.product(arrays));
Run Code Online (Sandbox Code Playgroud)

我明白了

cp = cp0 = [((-1, 1),), ((-2, 2),), ((-3, 3),)]
Run Code Online (Sandbox Code Playgroud)

但我想得到的是

cp1 = [(-1,-2,-3), (-1,-2,+3), (-1,+2,-3), (-1,+2,+3), ..., (+1,+2,-3), (+1,+2,+3)].
Run Code Online (Sandbox Code Playgroud)

我尝试了一些不同的东西:

cp = list(itertools.product(itertools.islice(arrays, len(arrays))));
cp = list(itertools.product(iter(arrays, len(arrays))));
Run Code Online (Sandbox Code Playgroud)

他们都让我CP0代替CP1.

有任何想法吗?

提前致谢.

python cartesian-product python-itertools

39
推荐指数
2
解决办法
5万
查看次数

如何将元组爆炸以便可以作为参数列表传递?

假设我有一个像这样的方法定义:

def myMethod(a, b, c, d, e)
Run Code Online (Sandbox Code Playgroud)

然后,我有一个变量和这样的元组:

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

有没有办法可以通过爆炸元组爆炸,以便我可以将其成员作为参数传递?像这样的东西(虽然我知道这不会起作用,因为整个元组被认为是第二个参数):

myMethod(myVariable, myTuple)
Run Code Online (Sandbox Code Playgroud)

如果可能的话,我想避免单独引用每个元组成员...

python parameters tuples iterable-unpacking

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

如何将函数和参数放入python队列?

我有一个包含2个线程的python程序(让我们将它们命名为'source'和'destination').源线程有时会使用一些参数将消息发布到目标线程.比目标线程选择一条消息,它必须使用保存在消息中的历史记录调用相应的函数.

这个任务可以通过多种方式解决.容易的是在目标线程的消息选择周期中调整一个大的'if ... if..if'并根据收到的消息类型和保存的参数调用函数.但这将导致巨大的代码(或大查找表),并且添加新的消息/处理函数将演变为在消息选择周期中编写代码的额外步骤.

由于python将函数视为第一类对象并具有元组,因此我想在消息中放置函数和参数,因此,目标线程选择一条消息,它只是调用保存在消息中的函数,而不知道它是什么函数.

我可以为具有指定数量的参数的函数编写代码:

from Queue import *
from thread import *
from time import *

q = Queue()

def HandleMsg( arg1, arg2 ) :
  print arg1, arg2

def HandleAnotherMsg( arg1, arg2, arg3 ) :
  print arg1, arg2, arg3

def DestinationThread( a ) :
  while True :
    (f, a, b) = q.get()
    f( a, b )

start_new_thread( DestinationThread, ( 0, ) )
print "start"
sleep( 1 )
q.put( (HandleMsg, 1, 2) )
sleep( 1 )
print "stop"
Run Code Online (Sandbox Code Playgroud)

问题是:如何修改代码,以便我可以把()一个函数与队列中的任意数量的参数放在一起?例如HandleAnotherMsg()?使用q.put((HandleAnotherMsg,1,2,3))会出现编译错误:(

python multithreading

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

如何通过Python args和kwargs?

虽然我对Python的*args和**kwargs有一般的了解(我认为),但我很难理解如何将它们从一个函数传递到另一个函数.这是我的模特:

from pdb import set_trace as debug
from django.db import models

class Person(models.Model):
    name = models.CharField(max_length=30)

    def __unicode__(self):
        return u'%s' % self.name

    def save_name_for(self, *args, **kwargs):
        self.name = 'Alex'
        return self

    def save_name(self, *args, **kwargs):
        debug()
        self.save_name_for(self, args, kwargs)
        self.save()
Run Code Online (Sandbox Code Playgroud)

我将名称分成两个以上的函数.这样我就可以通过对save_name_for方法进行单元测试来对我通常将所有逻辑进行单元测试.

当我在解释器中运行它并在save_name方法中停止时,正如我所料,我看到:

(Pdb) args
self =
args = (1, 2)
kwargs = {'last': 'Doe', 'first': 'John'}
Run Code Online (Sandbox Code Playgroud)

如果我然后进入save_name_for方法,我会看到:

(Pdb) args
self =
args = (<Person: >, (1, 2), {'last': 'Doe', 'first': 'John'})
kwargs = 
Run Code Online (Sandbox Code Playgroud)

有没有办法将save_name方法接收到的kwargs直接传递给save_name_for方法,以便它们出现在后者的kwargs中?我想在save_name_for方法的名称空间中看到类似的内容:

(Pdb) args
self =
args = …
Run Code Online (Sandbox Code Playgroud)

python

12
推荐指数
2
解决办法
4832
查看次数

Groovy将元组/ map扩展为参数

是否可以将地图扩展为方法参数列表

在Python中,它是可能的,例如. 将元组扩展为参数

我有def map = ['a':1, 'b':2] 一个方法def m(a,b)

我想写像smt一样 m(*map)

groovy arguments parameter-passing

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

python分解列表

我记得我曾经见过一个能够在python中分解列表的运算符.

例如

[[1],[2],[3]]
Run Code Online (Sandbox Code Playgroud)

通过应用该运营商,你得到

[1], [2], [3]
Run Code Online (Sandbox Code Playgroud)

什么是该运营商,任何帮助将不胜感激.

python list operators

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

IndexError:解析方法参数时,元组索引超出范围

我已经检查了这个问题,但在那里找不到答案.这是一个演示我的用例的简单示例:

def log(*args):
    message = str(args[0])
    arguments = tuple(args[1:])
    # message itself
    print(message)
    # arguments for str.format()0
    print(arguments)
    # shows that arguments have correct indexes
    for index, value in enumerate(arguments):
        print("{}: {}".format(index, value))
    # and amount of placeholders == amount of arguments
    print("Amount of placeholders: {}, Amount of variables: {}".format(message.count('{}'), len(arguments)))

    # But this still fails! Why?
    print(message.format(arguments))

log("First: {}, Second: {}, Third: {}, Fourth: {}", "asdasd", "ddsdd", "12312333", "fdfdf")
Run Code Online (Sandbox Code Playgroud)

并输出:

First: {}, Second: {}, Third: {}, Fourth: …
Run Code Online (Sandbox Code Playgroud)

python string-formatting

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

将字符串拆分或提取为函数的参数?

假设我有一个带字符串参数的函数.但我想动态生成它们.似乎没有办法轻松插入.这是怎么做到的?看看我的例子

i_take_strings('one', 'two', 'and_the_letter_C')

s = 'one two and_the_letter_c'

i_take_strings(x for x in s.split()) #python thinks I'm retarded with this attempt
Run Code Online (Sandbox Code Playgroud)

python string

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

使用格式运算符%将numpy RGB值数组转换为十六进制

关于这个SO 问题,使用格式化运算符将其应用于numpy数组的最佳方法是什么,其中数组的格式为下面给出的RGB值对应的格式

注意RGB值已经缩放为0到1,因此需要多次255来重新缩放

array([[ 0.40929448,  0.47071505,  0.27701891],
       [ 0.59383913,  0.60611158,  0.55329837],
       [ 0.4393785 ,  0.4276561 ,  0.34999225],
       [ 0.4159481 ,  0.4516056 ,  0.3026519 ],
       [ 0.54449997,  0.36963636,  0.4001209 ],
       [ 0.36970012,  0.3145826 ,  0.315974  ]])
Run Code Online (Sandbox Code Playgroud)

并且您想要每行的十六进制三元组

python format numpy colors

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

itertools:排列的笛卡尔乘积

使用pythons itertools,我想在一堆列表的所有排列的外积上创建一个迭代器.一个明确的例子:

import itertools
A = [1,2,3]
B = [4,5]
C = [6,7]

for x in itertools.product(itertools.permutations(A),itertools.permutations(B),itertools.permutations(C)):
    print x
Run Code Online (Sandbox Code Playgroud)

虽然这有效,但我想将其推广到任意列表列表.我试过了:

for x in itertools.product(map(itertools.permutations,[A,B,C])):
    print x
Run Code Online (Sandbox Code Playgroud)

但它并没有按照我的意图行事.预期的产出是:

((1, 2, 3), (4, 5), (6, 7))
((1, 2, 3), (4, 5), (7, 6))
((1, 2, 3), (5, 4), (6, 7))
((1, 2, 3), (5, 4), (7, 6))
((1, 3, 2), (4, 5), (6, 7))
((1, 3, 2), (4, 5), (7, 6))
((1, 3, 2), (5, 4), (6, 7))
((1, 3, 2), …
Run Code Online (Sandbox Code Playgroud)

python permutation cartesian-product python-itertools

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