相关疑难解决方法(0)

python 多处理池.starmap 不起作用

我正在使用多处理pool.starmap功能。我发现一个奇怪的问题。

from multiprocessing import Pool
p = multiprocessing.Pool()

NODE = [1,2,3,4];
PageRank = [0.25,0.25,0.25,0.25];
Destination = [[2,3,4],[3,4],[1,4],[2]];

Data = zip(NODE,PageRank,Destination)
Run Code Online (Sandbox Code Playgroud)

所以我使用zip函数创建一个数据集Data,它是一个列表,每个条目都是长度为 3 的元组。然后我调用该函数

p.starmap(MyFunction, zip(NODE,PageRank,Destination))
Run Code Online (Sandbox Code Playgroud)

效果很好。

但是,当我输入

p.starmap(MyFunction, Data))
Run Code Online (Sandbox Code Playgroud)

它输出空列表[]!!!我真的不知道发生了什么事。我实际上只是替换zip(NODE,PageRank,Destination)Data,这应该是同一件事,对吧?

是因为我使用 Jupyter 笔记本导致这个问题吗?

python pool multiprocessing

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

在Python中,"返回迭代器"是什么意思?

我在Python中使用networkx作为图形方法和各种实用程序的功能接口.我想在图表中创建一个包含节点所有邻居的列表.

该网页声明all_neighbors(图形,节点)返回迭代器.那是什么意思?如何在列表中保存邻居?

http://networkx.github.io/documentation/latest/reference/generated/networkx.classes.function.all_neighbors.html#networkx.classes.function.all_neighbors

python iterator networkx

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

如何在python中有条理地跳过for循环中的迭代步数?

我们有一个清单item_list,

item_list = ["a", "b", "XYZ", "c", "d", "e", "f", "g"]
Run Code Online (Sandbox Code Playgroud)

我们使用for循环遍历其项目,如果是item "XYZ",则跳过项目"c", "d", "e"并继续"f":

for item in item_list:
    if item == "XYZ":
       do_something()
       skip_3_items() ----> skip items "c", "d", "e"
    else:
        do_something_else()
Run Code Online (Sandbox Code Playgroud)

什么可能是实现这一目标的最pythonic方式?

python for-loop list

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

在对象中实现打包/解包

我有一个只包含属性的类,我想打包/解包来处理它.我collections.abc应该实现什么才能获得这种行为?

class Item(object):

    def __init__(self, name, age, gender)
        self.name = name
        self.age = age
        self.gender = gender

a, b, c = Item("Henry", 90, "male")
Run Code Online (Sandbox Code Playgroud)

我想避免使用namedtuple.

python python-2.7

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

从__iter__返回一个非迭代器

class test(object):
    def __init__(self):
        pass
    def __iter__(self):
        return "my string"

o = test()
print iter(o)
Run Code Online (Sandbox Code Playgroud)

为什么这会追溯?

$ python iter_implement.py
Traceback (most recent call last):
  File "iter_implement.py", line 9, in <module>
    print iter(o)
TypeError: iter() returned non-iterator of type 'str'
Run Code Online (Sandbox Code Playgroud)

我希望__iter__在这种情况下只返回字符串.何时以及为什么检测到返回的对象不是迭代器对象?

python

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

Python如何打印itertools.permutations的属性

我是Python新手,我正在尝试itertools:

import itertools as it
obj = it.permutations(range(4))
print(obj)
for perm in obj:
    print( perm )
Run Code Online (Sandbox Code Playgroud)

我的问题:如何在不使用循环的情况下obj 直接查看/打印所有排列for

我尝试了什么: 我尝试使用__dict__vars在这个SO链接中建议,但两个都不起作用(前者似乎不存在对象,而后者生成'TypeError:'itertools.permutations'对象不可调用').

请原谅,如果我的问题相当无趣 - 这个属性问题看起来很复杂,大部分用SO链接写的东西飞过我的头脑.

python attributes python-itertools

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

Python的list()函数修改了它的参数?

(我是Python的新手,所以即使在阅读教程之后,很多东西也让我感到困惑......)

最初,我有如下代码:

strings = ['>abc', 'qwertyu', '>def', 'zxcvbnm']
matrix  = zip(*strings)
for member in matrix:
    print("".join(member)) # characters are printed as expected
Run Code Online (Sandbox Code Playgroud)

- 这符合我的预期.但由于某种原因,我想确定矩阵中的成员数量; 因为len(矩阵)给出了错误,我决定将其复制到转换到列表:mtxlist = list(matrix).令人惊讶的是,在这一行之后,矩阵的内容似乎发生了变化 - 或者至少我不能像上面那样使用它:

strings = ['>abc', 'qwertyu', '>def', 'zxcvbnm']
matrix  = zip(*strings)
mtxlist = list(matrix) # this assignment empties (?) the matrix
for member in matrix:
    print("".join(member)) # nothing printed
Run Code Online (Sandbox Code Playgroud)

谁能解释那里发生了什么?

python

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

迭代包含一个字符串的元组实际上是迭代字符

在迭代只包含 1 个字符串的元组时,我注意到一个奇怪的行为:

foo = ("hello")
for entry in foo:
    print(entry)
Run Code Online (Sandbox Code Playgroud)

输出:

h
e
l
l
o
Run Code Online (Sandbox Code Playgroud)

但我希望这里只迭代一次,并连续输出“hello”。

如果我的元组包含 2 个条目,那就是发生的事情:

foo = ("hello", "world!")
for entry in foo:
    print(entry)
Run Code Online (Sandbox Code Playgroud)

输出:

hello
world!
Run Code Online (Sandbox Code Playgroud)

它是 CPython 实现中的错误吗?更奇怪的是,如果我使用列表而不是元组,则不会发生这种情况:

foo = ["hello"]
for entry in foo:
    print(entry)
Run Code Online (Sandbox Code Playgroud)

输出:

hello
Run Code Online (Sandbox Code Playgroud)

python string tuples python-3.x

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

'range()'如何在内部工作?

range()如何区分在这种情况下进行的调用?

例:

def ex():
    list = [1,2,3,4]
    for val in range(len(list)):
        print(val)
        break
    for val in range(len(list)):
        print(val)
        break
Run Code Online (Sandbox Code Playgroud)

输出 -

0
0
Run Code Online (Sandbox Code Playgroud)

总之,我的问题是为什么输出不是这样产生的?

0
1
Run Code Online (Sandbox Code Playgroud)

在第一次调用'first for循环'中的range()期间,调用是'range(len(list))',并且在第一次调用'second for循环'中的range()时,调用是'range(len(list))',相当于'first for循环'中第二次调用range().range()如何知道调用是来自'second for loop'而不是'first for loop'?

python range

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

python 地图、列表(地图)、lambda 和性能

我已经做了一段时间的程序程序员,只是试图将我的思维方式转变为使用函数式编程(目前在 Python 3 中)。因此,我没有编写 for-each 循环,而是试图掌握maplist(map(..))

假设我有一个简单的for-in循环,它执行一些资源繁重的计算(print为了简单起见,我将在此处替换):

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

现在,当我尝试执行以下操作时

map(lambda x: print(x), arr)
Run Code Online (Sandbox Code Playgroud)

什么也没发生,直到,我把它包装在一个列表中,它完成了我的超重print功能:

list(map(lambda x: print(x), arr))
Run Code Online (Sandbox Code Playgroud)

为什么?我错过了什么?我知道 map 返回一个迭代器,它应该节省内存,而不是立即保存整个列表。但是我的超重print功能什么时候会被触发呢?

python lambda functional-programming

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

迭代std :: vector而不使用vector.end()

C++新秀在这里.我编写了一个函数,它从向量中返回一个迭代器,我想使用这个迭代器从头到尾迭代向量.但是,矢量迭代器就像这样使用

for (auto iterator = vec.begin(); iterator != vec.end(); iterator ++) {
// do something here
}
Run Code Online (Sandbox Code Playgroud)

这意味着我还需要一个vec.end()来实现这一点.无论如何我只能使用vec.begin()迭代一个向量,就像我在python中常见的那样

for value in some_iterator:
# do something
Run Code Online (Sandbox Code Playgroud)

编辑:一些不相关的更新:

我看到一些关于我的python iterator和iterable的评论.迭代器确实可以这种方式使用(至少在Python 3中).例如:

some_list = [1,2,3,4]
some_iterator = iter(some_list)
for value in some_iterator:
    print(value)
Run Code Online (Sandbox Code Playgroud)

c++ iterator

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