我经常遇到如下代码:
if ( items != null)
{
foreach(T item in items)
{
//...
}
}
Run Code Online (Sandbox Code Playgroud)
基本上,if条件确保foreach块仅在items不为null时才会执行.我想知道这种if情况是否真的需要,或者foreach是否会处理这种情况items == null.
我的意思是,我可以简单地写一下
foreach(T item in items)
{
//...
}
Run Code Online (Sandbox Code Playgroud)
不用担心是否items为空?是if条件多余的?或者这取决于该类型的items或可能的T呢?
我正在寻找基本的循环:
for(int i = 0; i < MAX; i++) {
doSomething(i);
}
Run Code Online (Sandbox Code Playgroud)
但对于bash.
我需要迭代一个循环列表,可能多次,每次从最后访问的项目开始.
用例是连接池.客户端请求连接,迭代器检查指向的连接是否可用并返回它,否则循环直到找到可用的连接.
有没有一种巧妙的方法在Python中做到这一点?
是否有算法来估计值集的中值,模式,偏度和/或峰度,但这不需要一次将所有值存储在内存中?
我想计算基本的统计数据:
计算任何这些的基本公式是小学算术,我知道它们.还有许多统计库可以实现它们.
我的问题是我正在处理的集合中的大量(数十亿)值:在Python中工作,我不能只使用数十亿个元素创建列表或哈希.即使我用C语言编写,十亿元素数组也不太实用.
数据未排序.它是由其他过程随机,即时生成的.每组的大小变化很大,并且不会提前知道大小.
我已经弄清楚如何很好地处理均值和方差,以任何顺序迭代集合中的每个值.(实际上,在我的情况下,我按照它们生成的顺序来看它们.)这是我正在使用的算法,礼貌http://en.wikipedia.org/wiki/Algorithms_for_calculating_variance#On-line_algorithm:
这种"在线"算法存在缺陷(例如,精度问题,因为sum_of_squares快速增长大于整数范围或浮点精度),但它基本上给了我所需要的,而不必存储每个集合中的每个值.
但我不知道是否存在类似的技术来估计额外的统计数据(中位数,模式,偏度,峰度).只要处理N值所需的内存远小于O(N),我就可以使用有偏差的估计器,或者甚至是在一定程度上损害精度的方法.
如果库具有"在线"计算这些操作中的一个或多个的功能,那么将我指向现有的统计库也会有所帮助.
我是ruby的新手,目前正尝试与ruby中的基本字符串分别对每个字符进行操作.我正在使用ruby 1.8.6并想做类似的事情:
"ABCDEFG".each_char do |i|
puts i
end
Run Code Online (Sandbox Code Playgroud)
这会产生一个未定义的方法`each_char'错误.
我期待看到垂直输出:
A
B
C
D
..etc
Run Code Online (Sandbox Code Playgroud)
该each_char方法仅定义为1.9吗?我尝试使用普通each方法,但块只是将整个字符串输出到一行.我想办法如何做到这一点的唯一方法就是从头开始创建一个字符数组:
['A','B','C','D','...'].each do|i|
puts i
end
Run Code Online (Sandbox Code Playgroud)
这输出所需的:
A
B
C
..etc
Run Code Online (Sandbox Code Playgroud)
是否有一种方法可以使用未修改的字符串开始实现此输出?
我认为Java等价物是:
for (int i = 0; i < aString.length(); i++){
char currentChar = aString.charAt(i);
System.out.println(currentChar);
}
Run Code Online (Sandbox Code Playgroud) RecursiveIteratorIterator工作怎么样?
PHP手册没有任何记录或解释.IteratorIterator和之间有什么区别RecursiveIteratorIterator?
目前,我只能使用以下方法进行基于范围的循环:
for (auto& value : values)
Run Code Online (Sandbox Code Playgroud)
但有时我需要一个值的迭代器,而不是一个引用(无论出于何种原因).是否有任何方法无需通过整个矢量比较值?
这与你可以使用Python生成器函数有什么相反?:python生成器,生成器表达式和itertools模块是我最近python的一些特性.它们在设置操作链以在大量数据上执行时特别有用 - 我经常在处理DSV文件时使用它们.
那么什么时候不是使用生成器,生成器表达式或itertools函数的好时机?
zip()过itertools.izip(),或range()结束xrange(),或[x for x in foo]结束(x for x in foo)?显然,我们最终需要将生成器"解析"为实际数据,通常是通过创建列表或使用非生成器循环对其进行迭代.有时我们只需知道长度.这不是我要问的.
我们使用生成器,因此我们不会将新列表分配给内存以用于临时数据.这对于大型数据集尤其有用.对于小型数据集也有意义吗?有明显的内存/ CPU权衡吗?
考虑到列表理解性能与map()和filter()的开放性讨论,我特别感兴趣的是,如果有人对此做了一些分析.(alt链接)
是否可以迭代从结尾到开头的向量?
for (vector<my_class>::iterator i = my_vector.end();
i != my_vector.begin(); /* ?! */ ) {
}
Run Code Online (Sandbox Code Playgroud)
或者只有这样的东西才有可能:
for (int i = my_vector.size() - 1; i >= 0; --i) {
}
Run Code Online (Sandbox Code Playgroud) 给出一个清单
l = [1, 7, 3, 5]
Run Code Online (Sandbox Code Playgroud)
我想迭代所有连续列表项对(1,7), (7,3), (3,5),即
for i in xrange(len(l) - 1):
x = l[i]
y = l[i + 1]
# do something
Run Code Online (Sandbox Code Playgroud)
我想以更紧凑的方式做到这一点,比如
for x, y in someiterator(l): ...
Run Code Online (Sandbox Code Playgroud)
有没有办法使用内置的Python迭代器来做到这一点?我确定该itertools模块应该有一个解决方案,但我无法弄明白.