使用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) 我正在传递大量数据;具体来说,我试图将函数的输出传递给一个类,并且输出包含一个具有三个变量的元组。我不能像在输入参数中那样直接将我的函数(元组)的输出传递到类中。
如何格式化元组,使其在没有 的情况下被班级接受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) 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的项目
我有以下脚本每 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) 一个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如何区别元组。
以下代码有效,但显示详细.
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
根据此,我可以调用一个函数,N个参数与含有这些参数的元组,具有f(*my_tuple)。
有没有办法结合解包和解包变量?
就像是:
def f(x,y,z):...
a = (1,2)
f(*a, 3)
Run Code Online (Sandbox Code Playgroud) 这里的问题是我想将一个元组作为参数传递给第二个函数.之前有"重复!"的呐喊!我已经看过一篇关于类似问题的帖子,将元组扩展为参数
这是我正在测试的代码:
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 中连接两个不同的字符串列表。
例如:
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 ×9
tuples ×3
python-3.x ×2
arguments ×1
class ×1
ctypes ×1
function ×1
generator ×1
list ×1
object ×1
permutation ×1
python-2.7 ×1
string ×1
syntax ×1