让我们假设我有一个这样的列表:
mylist = ["a","b","c","d"]
Run Code Online (Sandbox Code Playgroud)
要获得打印的值及其索引,我可以enumerate像这样使用Python的函数
>>> for i,j in enumerate(mylist):
... print i,j
...
0 a
1 b
2 c
3 d
>>>
Run Code Online (Sandbox Code Playgroud)
现在,当我尝试在里面使用它时,list comprehension它给了我这个错误
>>> [i,j for i,j in enumerate(mylist)]
File "<stdin>", line 1
[i,j for i,j in enumerate(mylist)]
^
SyntaxError: invalid syntax
Run Code Online (Sandbox Code Playgroud)
所以,我的问题是:在列表理解中使用枚举的正确方法是什么?
是否有jQuery方法对对象的成员执行迭代,例如:
for (var member in obj) {
...
}
Run Code Online (Sandbox Code Playgroud)
我只是不喜欢这个for从我可爱的jQuery符号中伸出来!
因此,如果我在迭代时尝试从Java HashSet中删除元素,我会得到一个ConcurrentModificationException.从HashSet中删除元素子集的最佳方法是什么,如下例所示?
Set<Integer> set = new HashSet<Integer>();
for(int i = 0; i < 10; i++)
set.add(i);
// Throws ConcurrentModificationException
for(Integer element : set)
if(element % 2 == 0)
set.remove(element);
Run Code Online (Sandbox Code Playgroud)
这是一个解决方案,但我认为它不是很优雅:
Set<Integer> set = new HashSet<Integer>();
Collection<Integer> removeCandidates = new LinkedList<Integer>();
for(int i = 0; i < 10; i++)
set.add(i);
for(Integer element : set)
if(element % 2 == 0)
removeCandidates.add(element);
set.removeAll(removeCandidates);
Run Code Online (Sandbox Code Playgroud)
谢谢!
我有以下代码:
// Obtain the string names of all the elements within myEnum
String[] names = Enum.GetNames( typeof( myEnum ) );
// Obtain the values of all the elements within myEnum
Array values = Enum.GetValues( typeof( myEnum ) );
// Print the names and values to file
for ( int i = 0; i < names.Length; i++ )
{
print( names[i], values[i] );
}
Run Code Online (Sandbox Code Playgroud)
但是,我无法索引值.有更简单的方法吗?
或者我完全错过了什么!
要读取一些文本文件,在C或Pascal中,我总是使用以下代码段来读取数据,直到EOF:
while not eof do begin
readline(a);
do_something;
end;
Run Code Online (Sandbox Code Playgroud)
因此,我想知道如何在Python中简单快速地完成这项工作?
如果我有一堆(键,值)对的Perl哈希,迭代所有键的首选方法是什么?我听说使用each可能会以某种方式产生意想不到的副作用.那么,这是真的,并且是以下两种方法中最好的方法之一,还是有更好的方法?
# Method 1
while (my ($key, $value) = each(%hash)) {
# Something
}
# Method 2
foreach my $key (keys(%hash)) {
# Something
}
Run Code Online (Sandbox Code Playgroud) 我尝试使用Range并向后迭代each:
(4..0).each do |i|
puts i
end
==> 4..0
Run Code Online (Sandbox Code Playgroud)
迭代通过0..4写入数字.在另一个范围r = 4..0似乎没问题r.first == 4,r.last == 0.
我觉得上面的结构不能产生预期的结果似乎很奇怪.这是什么原因?这种行为合理的情况是什么?
说到处recursion都使用for循环是否正确?如果递归通常较慢,那么将其用于循环迭代的技术原因是什么?
如果始终可以将递归转换为for循环,那么可以采用经验法则吗?
迭代Perl数组的哪个是最佳实现(在速度和内存使用方面)?有没有更好的方法?(@Array不需要保留).
foreach (@Array)
{
SubRoutine($_);
}
Run Code Online (Sandbox Code Playgroud)
while($Element=shift(@Array))
{
SubRoutine($Element);
}
Run Code Online (Sandbox Code Playgroud)
while(scalar(@Array) !=0)
{
$Element=shift(@Array);
SubRoutine($Element);
}
Run Code Online (Sandbox Code Playgroud)
for my $i (0 .. $#Array)
{
SubRoutine($Array[$i]);
}
Run Code Online (Sandbox Code Playgroud)
map { SubRoutine($_) } @Array ;
Run Code Online (Sandbox Code Playgroud) 如何迭代元组(使用C++ 11)?我尝试了以下方法:
for(int i=0; i<std::tuple_size<T...>::value; ++i)
std::get<i>(my_tuple).do_sth();
Run Code Online (Sandbox Code Playgroud)
但这不起作用:
错误1:抱歉,未实现:无法将"Listener ..."扩展为固定长度的参数列表.
错误2:我不能出现在常量表达式中.
那么,我如何正确迭代元组的元素?