yield
Python中关键字的用途是什么?它有什么作用?
例如,我试图理解这段代码1:
def _get_child_candidates(self, distance, min_dist, max_dist):
if self._leftchild and distance - max_dist < self._median:
yield self._leftchild
if self._rightchild and distance + max_dist >= self._median:
yield self._rightchild
Run Code Online (Sandbox Code Playgroud)
这是来电者:
result, candidates = [], [self]
while candidates:
node = candidates.pop()
distance = node._get_dist(obj)
if distance <= max_dist and distance >= min_dist:
result.extend(node._values)
candidates.extend(node._get_child_candidates(distance, min_dist, max_dist))
return result
Run Code Online (Sandbox Code Playgroud)
_get_child_candidates
调用该方法时会发生什么?列表是否返回?单个元素?它又被召唤了吗?后续通话何时停止?
1.代码来自Jochen Schulz(jrschulz),他为度量空间创建了一个很棒的Python库.这是完整源代码的链接:模块mspace.
我想要一个算法迭代列表切片.切片大小设置在功能之外,可以有所不同.
在我看来它是这样的:
for list_of_x_items in fatherList:
foo(list_of_x_items)
Run Code Online (Sandbox Code Playgroud)
有没有办法正确定义list_of_x_items
或使用python 2.5执行此操作的其他方法?
edit1:澄清 "分区"和"滑动窗口"这两个术语听起来都适用于我的任务,但我不是专家.所以我会更深入地解释这个问题并添加到问题中:
fatherList是我从文件中获取的多级numpy.array.函数必须找到系列的平均值(用户提供系列的长度)平均我正在使用该mean()
函数.现在进行问题扩展:
edit2:如何修改你提供的函数来存储额外的项目,并在下一个fatherList被输入函数时使用它们?
例如,如果列表长度为10且块的大小为3,则列表的第10个成员将被存储并附加到下一个列表的开头.
我有一个包含各种字符串值的列表.每当我看到,我想拆分列表WORD
.结果将是一个列表列表(将是原始列表的子列表),其中只包含一个WORD
我可以使用循环执行此操作的实例,但是有更多的pythonic方法可以实现此目的吗?
示例= ['A', 'WORD', 'B' , 'C' , 'WORD' , 'D']
结果= [['A'], ['WORD','B','C'],['WORD','D']]
这是我尝试过但它实际上没有达到我想要的,因为它将放入WORD
一个应该在的不同列表:
def split_excel_cells(delimiter, cell_data):
result = []
temp = []
for cell in cell_data:
if cell == delimiter:
temp.append(cell)
result.append(temp)
temp = []
else:
temp.append(cell)
return result
Run Code Online (Sandbox Code Playgroud) 给定一个任意字符串(即,不基于模式),请说:
>>> string.ascii_letters
'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'
Run Code Online (Sandbox Code Playgroud)
我试图基于索引列表分区字符串.
这是我尝试过的,它确实有效:
import string
def split_at_idx(txt, idx):
new_li=[None]*2*len(idx)
new_li[0::2]=idx
new_li[1::2]=[e for e in idx]
new_li=[0]+new_li+[len(txt)]
new_li=[new_li[i:i+2] for i in range(0,len(new_li),2)]
print(new_li)
return [txt[st:end] for st, end in new_li]
print(split_at_idx(string.ascii_letters, [3,10,12,40]))
# ['abc', 'defghij', 'kl', 'mnopqrstuvwxyzABCDEFGHIJKLMN', 'OPQRSTUVWXYZ']
Run Code Online (Sandbox Code Playgroud)
拆分基于索引列表[3,10,12,40]
.然后需要将此列表转换为开始,结束对的列表[[0, 3], [3, 10], [10, 12], [12, 40], [40, 52]]
.我使用切片分配来设置平均值和赔率,然后将列表理解分组成对,并使用第二个LC来返回分区.
对于这样一个简单的函数来说,这似乎有点复杂.有没有更好/更有效/更惯用的方式来做到这一点?
这可能与Python 3.3: Split string and create all Combinations类似的问题密切相关,但我无法从中推断出 pythonic 解决方案。
问题是:
假设有一个诸如 的 str 'hi|guys|whats|app'
,我需要用分隔符分割该 str 的所有排列。例子:
#splitting only once
['hi','guys|whats|app']
['hi|guys','whats|app']
['hi|guys|whats','app']
#splitting only twice
['hi','guys','whats|app']
['hi','guys|whats','app']
#splitting only three times
...
etc
Run Code Online (Sandbox Code Playgroud)
我可以编写一个回溯算法,但是Python(例如itertools)是否提供了一个简化该算法的库?
提前致谢!!
我有一个类似于下面的列表
['a','b','c','d','e','f','g','h','i','j']
Run Code Online (Sandbox Code Playgroud)
我想用索引列表分开
[1,4]
Run Code Online (Sandbox Code Playgroud)
在这种情况下,它将是
[['a'],['b','c'],['d','e','f','g','h','i','j']]
Run Code Online (Sandbox Code Playgroud)
作为
[:1] =['a']
[1:4] = ['b','c']
[4:] = ['d','e','f','g','h','i','j']
Run Code Online (Sandbox Code Playgroud)
情况 2:如果索引列表是
[0,6]
Run Code Online (Sandbox Code Playgroud)
这将是
[[],['a','b','c','d','e'],['f','g','h','i','j']]
Run Code Online (Sandbox Code Playgroud)
作为
[:0] = []
[0:6] = ['a','b','c','d','e']
[6:] = ['f','g','h','i','j']
Run Code Online (Sandbox Code Playgroud)
情况 3 如果索引是
[2,5,7]
Run Code Online (Sandbox Code Playgroud)
它将是 [['a','b'],['c','d','e'],['h','i','j']] 作为
[:2] =['a','b']
[2:5] = ['c','d','e']
[5:7] = ['f','g']
[7:] = ['h','i','j']
Run Code Online (Sandbox Code Playgroud) 如何替换我们知道python中的确切索引的字符串中的字符?
例如:name ="ABCDEFGH"我需要将所有奇数索引位置字符更改为"$"字符.
name = "A$C$E$G$"
Run Code Online (Sandbox Code Playgroud)
(从0开始考虑指数bigin)