def partition(n, iterable):
p = izip_longest(*([iter(iterable)] * n))
r = []
for x in p:
print(x) #I added this
s = set(x)
s.discard(None)
r.append(list(s))
return r
Run Code Online (Sandbox Code Playgroud)
这实际上是在SO上的一个职位发布,并且是一个新手我觉得它很有趣.所以你得到如下输出:
partition(5, L)
(1, 2, 3, 4, None)
Out[86]: [[1, 2, 3, 4]]
Run Code Online (Sandbox Code Playgroud)
对我来说,这已经令人困惑,因为我认为izip_longest(*([iter(iterable)] * n))会izip_longest在n个相同迭代器的列表上运行该函数,所以我首先要预期输出(1,1,1,1,1)然后输出(2,2,2,2,2)等等.
这个问题的简短版本就是这一行:
p = izip_longest(*([iter(iterable)] * n))
Run Code Online (Sandbox Code Playgroud)
解析它我会想[iter(iterable)]*n创建一个长度为n的相同iterables的列表,它们都指向同一个东西 - 这就是它在命令行上的作用,但这似乎不是它的作用这里基于上面印刷的输出.
另外我认为开头的*...longest(*...是因为列表的长度未知,但我认为这完全没有意义.*函数调用中的第一个符号是什么?似乎它不是简单地指出一个未知长度的参数列表......
所以在一天结束的时候,我完全迷失了.有人可以告诉我这个语法吗?
非常感谢任何输入!
感谢所有有用的答案,每个人.我不确定我是否正在寻找答案或问题,但在我看来,这个列表理解将对列表和元组做同样的事情(我意识到迭代器也适用于字典,自定义类,其他东西.. .)
[L[i*n:(i+1)*n] for i in range(int(ceil(len(L)/float(n)))) ]
Run Code Online (Sandbox Code Playgroud) 我从这里提取了这个结果:
有趣的是,结果
var_dump((int)(PHP_INT_MAX + 1))将显示为负数(在此特定示例的情况下,它将显示int(-9223372036854775808))。同样,这里的关键是让候选人知道该值将显示为负数。
int 是否为负,因为加 1 会溢出整数位并更改表示 int 符号的位?什么原因?
我确信这个信息在某处,但我找不到,Apple开发人员热线似乎不知道我在说什么.在Xcode中用于启动屏幕的资产库中,有一些标记为:
iPhone Portrait ---> Retina HD 5.5和Retina HD 4.7 iOS8
iPhone Portrait ---> 2x&Retina 4 iOS 7,8
iPhone Portrait ---> 1x,2x和Retina 4 iOS 5,6
我已准备好启动屏幕,并且我有这些单独文件的大小,但我看不到它们的大小与Xcode中的这些Apple标签的对应关系.此外,这里的Apple文档(https://developer.apple.com/library/ios/documentation/LanguagesUtilities/Conceptual/iTunesConnect_Guide/Appendices/Properties.html#//apple_ref/doc/uid/TP40011225-CH26-SW1这是Apple Developer推荐给我的只是指iphone 6和6s尺寸,这与Xcode标签组织不符.
这似乎应该是1分钟的查询.我错过了什么,这个超级基本信息在哪里?
在cursor查看MongoDB 的文档时,我看不到删除游标的方法。如果我使用no_cursor_timeout属性设置为True 的游标,在PyMongo中会发生什么?即使我还没有到达游标结果的结尾,脚本结束时游标也会被删除吗?
我是第一次进入SciPy LinAlg模块,并且看到了以下功能:
def _makearray(a):
new = asarray(a)
wrap = getattr(a, "__array_prepare__", new.__array_wrap__)
return new, wrap
Run Code Online (Sandbox Code Playgroud)
到底是__array_wrap__做什么的?我找到了文档,但是我不明白这个解释:
At the end of every ufunc, this method is called on the input object with the
highest array priority, or the output object if one was specified. The ufunc-
computed array is passed in and whatever is returned is passed to the user.
Subclasses inherit a default implementation of this method, which transforms the
array into a new instance …Run Code Online (Sandbox Code Playgroud) 我刚开始学习一个Haskell,我在一个例子中看到了这个没有解释:
tell :: (Show a) => [a] -> String
Run Code Online (Sandbox Code Playgroud)
这是什么意思,特别是=>?我知道如果我替换->或删除它将无法工作,但我真的不明白为什么.
一旦用户选择了输入参数,我就会在 Shiny 应用程序中运行相当耗时的计算。为了确保计算不会运行不必要的时间,我创建了以下操作按钮:
actionButton('seeData','see Data' )
Run Code Online (Sandbox Code Playgroud)
然后,我尝试使用以下代码仅在每次单击按钮时运行一次耗时的计算(并且在没有单击按钮时从不运行):
observeEvent( input$seeData, {
...long, includes several function calls...
})
Run Code Online (Sandbox Code Playgroud)
在observeEvent我内部确实引用了其他输入参数。
我发现,无论我调整输入参数多少次,直到按下按钮才第一次运行计算。但是,一旦我按下按钮一次,只要更改任何输入参数,就会运行计算。当我只按一次按钮时,为什么代码会运行第二次、第三次、第四次(等等)?
我的目标似乎只是典型的用例,但我认为有一些observe我不理解的棘手isolate问题。observeEvent我做错了什么以及如何实现一键一计算功能?
我想转这个
a = {'a': {'b': 'b aw', 'c': 'c aw'}, 'b': {'b': 'b2 aw', 'c': 'c2 aw'}, 'c': {}}
Run Code Online (Sandbox Code Playgroud)
进入这个
['b aw', 'c aw', 'b2 aw', 'c2 aw']
Run Code Online (Sandbox Code Playgroud)
具有列表理解能力。我想我需要一些方法来使这个表达“合法”:
a2 = [a1 for a1 in a.values().values()]
Run Code Online (Sandbox Code Playgroud)
我不想要,dict(a.values)因为那只会让我回到我原来的字典,a。我知道有很多方法可以用 for 循环来做到这一点,但是有没有办法在没有 for 循环的情况下做到这一点?谢谢。
我想找到一个正则表达式,它可以将段落(长字符串,没有新行字符需要担心)分解成句子,其中一个简单的规则是{.,?,!}后跟一个空格然后是一个大写字母应该是句子的结尾(我意识到这对现实生活来说不是一个好规则).
我有部分工作,但它没有完成这项工作:
line = 'a b c FFF! D a b a a FFF. gegtat FFF. A'
matchObj = re.split(r'(.*?\sFFF[\.|\?|\!])\s[A-Z]', line)
print (matchObj)
Run Code Online (Sandbox Code Playgroud)
版画
['', 'a b c FFF!', '', ' a b a a FFF. gegtat FFF.', '']
Run Code Online (Sandbox Code Playgroud)
而我想得到:
['a b c FFF!', 'D a b a a FFF. gegtat FFF.']
Run Code Online (Sandbox Code Playgroud)
所以有两个问题.
为什么结果中有空成员('')?
我理解为什么D从分裂结果中删除 - 这是第一次搜索的一部分.如何以不同的方式构建我的搜索,以便在标点符号后面的大写字母被放回,以便它可以包含在下一句中?在这种情况下,如何让D在分割结果的第二个元素中出现?
我知道我可以通过某种for循环来完成这个,只是剥离第一个结果,加回大写字母,然后重新做一遍,但这似乎不是那么Pythonic.如果正则表达式不是这里的方法,还有什么东西仍然可以避免for循环吗?
谢谢你的任何建议.
我遇到了这个 post可变参数模板函数来连接 std::vector 容器,建议使用以下语法:
template<typename T>
void append_to_vector(std::vector<T>& v1, const std::vector<T>& v2) {
std::cout << v2[0] << std::endl;
for (auto& e : v2) v1.push_back(e);
}
template<typename T, typename... A>
std::vector<T> concat_version3(std::vector<T> v1, const A&... vr) {
int unpack[] { (append_to_vector(v1, vr), 1)... };
(void(unpack));
return v1;
}
Run Code Online (Sandbox Code Playgroud)
我开始玩弄它以了解它是如何工作的,因为我还没有看到这个:
int unpack[] { (append_to_vector(v1, vr), 0)... };
(void(unpack));
Run Code Online (Sandbox Code Playgroud)
似乎这是某种动态生成的初始化列表,它也有副作用?我也对0上述无关紧要的事实感到困惑。我替换了 -1 和 5,这些值中的每一个也都工作得很好。
那么有人可以告诉我这种技术/语法的名称以及上面两行中究竟发生了什么?如果我错过了相关的 SO 帖子,我将非常感谢任何指点并道歉。