相关疑难解决方法(0)

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
查看次数

以元组的形式传递多个参数

我正在传递大量数据;具体来说,我试图将函数的输出传递给一个类,并且输出包含一个具有三个变量的元组。我不能像在输入参数中那样直接将我的函数(元组)的输出传递到类中。

如何格式化元组,使其在没有 的情况下被班级接受input_tuple[0], input_tuple[1], input_tuple[2]

这是一个简单的例子:

#!/usr/bin/python

class InputStuff(object):

    def __init__(self, a, b, c):
        self.a = a
        self.b = b
        self.c = c


input_tuple = (1, 2, 3)
instance_1 = InputStuff(input_tuple)

# Traceback (most recent call last):
#   File "Untitled 3.py", line 7, in <module>
#     instance_1 = InputStuff(input_tuple)
# TypeError: __init__() takes exactly 4 arguments (2 given)

InputStuff(1, 2, 3)
# This works
Run Code Online (Sandbox Code Playgroud)

python arguments tuples class object

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

在另一个函数调用中调用一个函数

def func1(arg1,arg2,arg3,arg4)
    ...

def func2(arg5,arg6)
    return a,b,c,d

func1(func2(arg5,arg6))
Run Code Online (Sandbox Code Playgroud)

我可以像这样调用func1(func2(arg5,arg6))吗?因为func2将返回4个将传递给func1的项目

python syntax function

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

简化 Python 中的 Ctype 联合(在 Windows 中发送键盘事件)

我有以下脚本每 xx 秒发送一个键盘键(F15默认情况下),灵感来自网上找到的一些代码

我想删除与鼠标事件相关的类型和联合,但无法使其工作。特别是,我不知道如何删除类MOUSEINPUT和类型的联合_INPUTunion(删除它们将停止发送键盘键)。

关于如何将脚本修剪到最小(即只保留与键盘相关的代码)的任何建议?

以下代码将发送密钥“C”以进行调试。

#!/python

import ctypes
import sys
import time

LONG = ctypes.c_long
DWORD = ctypes.c_ulong
ULONG_PTR = ctypes.POINTER(DWORD)
WORD = ctypes.c_ushort

class MOUSEINPUT(ctypes.Structure):
    _fields_ = (
        ('dx', LONG), ('dy', LONG), ('mouseData', DWORD),
        ('dwFlags', DWORD), ('time', DWORD),
        ('dwExtraInfo', ULONG_PTR)
    )

class KEYBDINPUT(ctypes.Structure):
    _fields_ = (
        ('wVk', WORD), ('wScan', WORD),
        ('dwFlags', DWORD), ('time', DWORD),
        ('dwExtraInfo', ULONG_PTR)
    )

class _INPUTunion(ctypes.Union):
    _fields_ = (('mi', MOUSEINPUT), ('ki', KEYBDINPUT))

class INPUT(ctypes.Structure):
    _fields_ = (('type', DWORD), ('union', …
Run Code Online (Sandbox Code Playgroud)

python ctypes

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

元组作为函数参数

一个tuple在python(在码块)由逗号定义; 括号不是必需的(在以下情况下)。所以这三个都是等效的:

a, b = 1, 2
a, b = (1, 2)
(a, b) = 1, 2
Run Code Online (Sandbox Code Playgroud)

如果我定义一个功能

def f(a, b):
    print(a, b)
Run Code Online (Sandbox Code Playgroud)

以这种方式调用它将起作用:

f(2, 3)
Run Code Online (Sandbox Code Playgroud)

这不会:

f((2, 3))
# TypeError: f() missing 1 required positional argument: 'b'
Run Code Online (Sandbox Code Playgroud)

当它们是函数参数时,python如何区别元组?这里的括号是必须的(我明白为什么会这样,我很高兴python可以这样工作!)。

我的问题是:当它们是函数参数时,python如何区别元组。

python tuples python-3.x python-internals

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

在Python 3中使用itertools.product代替双嵌套for循环

以下代码有效,但显示详细.

def gen(l):
    for x in range(l[0]):
        for y in range(l[1]):
            for z in range(l[2]):
                yield [x, y, z]
l = [1, 2, 3]
print(list(gen(l)))

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

我的目的是用itertools.product减少LOC.这就是我想出来的.

from itertools import product
def gen(l):
    for x, y, z in product(map(range, l)):
        yield [x, y, z]
l = [1, 2, 3]
print(list(gen(l)))

ValueError: not enough values to unpack (expected 3, got 1)
Run Code Online (Sandbox Code Playgroud)

是否有不同的方法来使用itertools.product以便有足够的值来解压缩?

python generator cartesian-product python-itertools python-3.x

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

当需要其他变量时,如何解压元组?

根据,我可以调用一个函数,N个参数与含有这些参数的元组,具有f(*my_tuple)

有没有办法结合解包和解包变量?

就像是:

def f(x,y,z):...
a = (1,2)
f(*a, 3)
Run Code Online (Sandbox Code Playgroud)

python python-2.7 iterable-unpacking

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

将元组传递给多参数函数

这里的问题是我想将一个元组作为参数传递给第二个函数.之前有"重复!"的呐喊!我已经看过一篇关于类似问题的帖子,将元组扩展为参数

这是我正在测试的代码:

def producer():
    return ('a','b')

def consumer(first, second, third):
    print first+second+third

arg = producer()
consumer(*arg, 'c') # expected abc
Run Code Online (Sandbox Code Playgroud)

这输出错误:

There's an error in your program *** only named arguments may follow *expression
Run Code Online (Sandbox Code Playgroud)

这个有用的错误消息导致切换参数的顺序consumer('c', *arg),但这并不能完全解决问题,因为它会输出'cab'.

所以我的问题是,是否有更好的方法将元组传递给多参数函数,并保留排序?

同样对于奖励积分,'*'运算符有什么作用?(这在前一篇文章中没有解释)

python tuples

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

连接两个不同列表中的字符串

我需要在 python 中连接两个不同的字符串列表。

例如:

list1 = ['A','B','C']
list2 = ['D', 'E']
Run Code Online (Sandbox Code Playgroud)

我想获得

list3 = ['AD', 'AE', 'BD', 'BE', 'CD', 'CE']
Run Code Online (Sandbox Code Playgroud)

我试过了:

list3 = zip(list1,list2)
Run Code Online (Sandbox Code Playgroud)

它返回

list3 = [('A','D'), ('B','E')]
Run Code Online (Sandbox Code Playgroud)

我也尝试过:

list(itertools.product(list1, list2))

但它返回

[('A','D'),('A','E'),...,('C','E')] 而不是 ['AD', 'AE', 'BD', 'BE'、'CD'、'CE']

任何想法?谢谢

python string list concatenation cartesian-product

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