相关疑难解决方法(0)

转置/解压缩功能(zip的反转)?

我有一个2项元组的列表,我想将它们转换为2个列表,其中第一个包含每个元组中的第一个项目,第二个列表包含第二个项目.

例如:

original = [('a', 1), ('b', 2), ('c', 3), ('d', 4)]
# and I want to become...
result = (['a', 'b', 'c', 'd'], [1, 2, 3, 4])
Run Code Online (Sandbox Code Playgroud)

是否有内置函数可以做到这一点?

python transpose list matrix

480
推荐指数
6
解决办法
15万
查看次数

如何在Python 3中使用filter,map和reduce

filter,map并且reduce在Python 2中完美地工作.这是一个例子:

>>> def f(x):
        return x % 2 != 0 and x % 3 != 0
>>> filter(f, range(2, 25))
[5, 7, 11, 13, 17, 19, 23]

>>> def cube(x):
        return x*x*x
>>> map(cube, range(1, 11))
[1, 8, 27, 64, 125, 216, 343, 512, 729, 1000]

>>> def add(x,y):
        return x+y
>>> reduce(add, range(1, 11))
55
Run Code Online (Sandbox Code Playgroud)

但是在Python 3中,我收到以下输出:

>>> filter(f, range(2, 25))
<filter object at 0x0000000002C14908>

>>> map(cube, range(1, 11))
<map object at 0x0000000002C82B70> …
Run Code Online (Sandbox Code Playgroud)

python reduce functional-programming filter python-3.x

292
推荐指数
5
解决办法
25万
查看次数

两个名单之间的组合?

已经有一段时间了,我无法绕过我想要制作的算法.基本上,我有两个列表,并希望获得两个列表的所有组合.

我可能不会解释它是正确的,所以这是一个例子.

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

在这种情况下的输出将是:

1.  A1 B2
2.  B1 A2
Run Code Online (Sandbox Code Playgroud)

棘手的部分是"name"变量中的项目可能比"number"变量中的项目更多(数字将始终等于或小于name变量).

我很困惑如何进行所有组合(嵌套for循环?),如果名称中的项目多于它们在数字列表中的项目,则更加混淆逻辑以移动名称变量中的项目.

我不是最好的程序员但是如果有人可以帮助我澄清逻辑/算法来实现这一点,我想我可以试一试.所以我刚刚陷入嵌套for循环.

更新:

这是3个变量和2个数字的输出:

name = 'a', 'b', 'c'
number = 1, 2
Run Code Online (Sandbox Code Playgroud)

输出:

1.  A1 B2
2.  B1 A2
3.  A1 C2
4.  C1 A2
5.  B1 C2
6.  C1 B2
Run Code Online (Sandbox Code Playgroud)

python algorithm combinations list

158
推荐指数
11
解决办法
14万
查看次数

Python 3中的zip()函数

我知道如何zip()在Python 3中使用该函数.我的问题是关于以下我觉得非常奇怪的:

我定义了两个列表:

lis1 = [0, 1, 2, 3]
lis2 = [4, 5, 6, 7]
Run Code Online (Sandbox Code Playgroud)

我通过zip()以下方式使用这些:

1. test1 = zip( lis1, lis2)

2. test2 = list(zip(lis1, lis2))
Run Code Online (Sandbox Code Playgroud)

当我输入test1翻译时,我得到了这个:

"zip object at 0x1007a06c8"
Run Code Online (Sandbox Code Playgroud)

所以,我输入list(test1)解释器,我得到了预期的结果,但是当我list(test1)再次输入时,我得到一个空列表.

我觉得奇怪的是,无论我test2在解释器上输入多少次,我总能得到预期的结果,而不是空列表.

python

57
推荐指数
2
解决办法
11万
查看次数

为什么我不能在同一数据上迭代两次?

老实说,我在这里有点困惑,为什么我不能在相同的数据上迭代两次?

def _view(self,dbName):
    db = self.dictDatabases[dbName]
    data = db[3]

    for row in data:
        print("doing this one time")

    for row in data:
        print("doing this two times")
Run Code Online (Sandbox Code Playgroud)

这将打印出"一次这样做"几次(因为数据有几行),但它根本不会打印出"这样做两次"......

我第一次迭代数据工作正常,但第二次当我运行最后一个列表"for data in data"时,这没有返回...所以执行它一次工作但不是两次......?

仅供参考 - 数据是一个csv.reader对象(如果是这样的原因)......

python

34
推荐指数
4
解决办法
2万
查看次数

不能从定义__slots__的多个类继承?

最近Python中的某种情况让我感到震惊,经过一番研究后,其原因仍然不完全清楚.以下类定义似乎完美无缺,并将产生预期的内容:

class A: __slots__ = 'a', 'b'
class B(A): __slots__ = ()
class C(A): __slots__ = ()
class D(B, C): __slots__ = ()
Run Code Online (Sandbox Code Playgroud)

这些是以钻石继承模式排列的四个类.但是,不允许有些类似的模式.以下类定义看起来好像它们的功能与第一个相同:

class B: __slots__ = 'a', 'b'
class C: __slots__ = 'a', 'b'
class D(B, C): __slots__ = ()

Traceback (most recent call last):
  File "<pyshell#74>", line 1, in <module>
    class D(B, C): __slots__ = ()
TypeError: multiple bases have instance lay-out conflict
Run Code Online (Sandbox Code Playgroud)

但是,TypeError在此示例中引发了a .因此出现了三个问题:(1)考虑到插槽名称,这是Python中的错误吗?(2)这样的答案有什么理由?(3)最好的解决方法是什么?


参考文献:

python class slots

18
推荐指数
2
解决办法
3279
查看次数

TypeError:多个基数具有实例布局冲突

我想用两个创建一个类:collections.OrderedDictcollections.DefaultDict.这样我就可以获得一个有序的字典,并为访问的现有密钥设置一个默认值.有什么方法可以做到这一点?

我的解决方案是围绕我上面提到的两个类创建另一个类.由于我认为每个类中的方法具有相同的名称,这会导致错误吗?

from collections import defaultdict, OrderedDict
class owndic(OrderedDict, defaultdict):
    pass
Run Code Online (Sandbox Code Playgroud)

生产

TypeError: multiple bases have instance lay-out conflict
Run Code Online (Sandbox Code Playgroud)

干杯!

python class python-3.x defaultdict

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