我只想弄清楚这样的事情(用C语言写成):
for (long long i = 100; i <= pow(10,length); i = i * 100){}
Run Code Online (Sandbox Code Playgroud)
将被翻译成Python 3.作为最后一部分,迭代器应该将自身乘以100,这是我被卡住的地方.
任何援助将不胜感激.
我的程序有点问题.
Iterator<MyString> it = globalSet.iterator();
Iterator<String> it2 = globalArray.iterator();
while(it.hasNext() && it2.hasNext())
{
System.out.println(it2.next());
if(it.next().getLine().contains(it2.next()) == true)
{
//it.remove();
}
}
Run Code Online (Sandbox Code Playgroud)
如果我禁用if子句我的输出是正确的,如下所示:
1;Trägertour 096;1410;Autotour 1N410;
2;Trägertour 097;1410;Autotour 1N410;
3;Trägertour 098;1410;Autotour 1N410;
4;Trägertour 099;1410;Autotour 1N410;
5;Trägertour 100;1410;Autotour 1N410;
Run Code Online (Sandbox Code Playgroud)
但是如果if子句被启用,我的输出看起来像这样:
1;Trägertour 096;1410;Autotour 1N410;
3;Trägertour 098;1410;Autotour 1N410;
5;Trägertour 100;1410;Autotour 1N410;
Run Code Online (Sandbox Code Playgroud)
所以为什么?
这可能是重复的,所以如果我没找到,请告诉我.
我的问题在标题中.
我知道下面的代码会这样做,但我不认为这是应该怎么做的.这可以压缩到一个更干净的功能,做同样的事情吗?内置函数怎么样?
def find_sorted_avg(dict_list, key):
total = 0
for item in dict_list:
total += item[key]
return total / len(dict_list)
Run Code Online (Sandbox Code Playgroud)
如果您知道更好的方法,请告诉我.
我想学习zip类的功能.我写了这个非常简单的例子.
>>> names = ['name1','name2','name3']
>>> ages = ['age1','age2','age3']
>>> print(zip(names, ages))
<zip object at 0x03DB18F0>
>>> zipped = zip(names, ages)
for i in zipped:
type(i)
print(i)
Run Code Online (Sandbox Code Playgroud)
和输出(如预期的那样) -
<class 'tuple'>
('name1', 'age1')
<class 'tuple'>
('name2', 'age2')
<class 'tuple'>
('name3', 'age3')
Run Code Online (Sandbox Code Playgroud)
但是,如果我这样写,请立即在此行后:
for i in zipped:
print(i)
Run Code Online (Sandbox Code Playgroud)
它编译但没有打印任何东西!
要重新检查,我再次这样做了 -
>>> zipped = zip(names, ages)
>>> for i in zipped:
print(i)
('name1', 'age1')
('name2', 'age2')
('name3', 'age3')
Run Code Online (Sandbox Code Playgroud)
这次打印正确.但是在做解压缩时 -
>>> names2, ages2 = zip(*zipped)
Traceback (most recent call last):
File …Run Code Online (Sandbox Code Playgroud) 我对python的生成器有点困惑,并使用for循环vs使用next()它们.
我需要解析一个文本文件,其中包含有关每条线路上汽车的信息,每条汽车在强制性线路后面有多条非强制性线路,型号名称以a开头a..所以我想以pythonic的方式迭代汽车.
我有以下一点代码:
lines = """a. car1 model
b. car1 price
c. car1 details
a. car2 model
b. car2 price
a. car3 model
b. car3 price
c. car3 details
d. car3 comments
"""
def iter_cars(lineit):
res = []
for line in lineit:
if line.startswith('a') and res:
yield res
res = []
res.append(line)
yield res
# print the cars with next...,
lineit = iter(lines.split('\n'))
print(next(iter_cars(lineit)))
print(next(iter_cars(lineit)))
print(next(iter_cars(lineit)))
# reset the iterator and print the cars …Run Code Online (Sandbox Code Playgroud) 我想从基值开始,1然后将2每次迭代的基值乘以定义的限制(比如我的数组的总长度).
我是否必须实现一个特殊的迭代器才能做到这一点?或者,我可以结合其他方法,迭代器类似map,并filter以实现相同的功能组合在一起.虽然我会想象实现我的迭代器会更有效率,但也更冗长.
任何人都可以在我的代码中解释for循环的差异吗?我知道迭代器是指向某些数据的指针,当我输入"*iter"时,我正在访问该指针指向的值(一个int).但我不明白为什么汽车在这里不会以同样的方式工作.为什么我不需要在另一个for循环中取消引用顶点?
#include <iostream>
#include <list>
#include <queue>
class Graph {
public:
Graph(int num_v): num_vertices(num_v), adj_list(new std::list<int>[num_v]) {}
void add_edge(int u, int v) { adj_list[u].push_back(v); }
void bfs_traversal(int start) {
bool* visited = new bool[num_vertices];
for (int i = 0; i < num_vertices; i++)
visited[i] = false;
std::queue<int> q;
visited[start] = true;
q.push(start);
//std::list<int>::iterator iter;
while(! q.empty()) {
int node = q.front();
std::cout << node << " ";
q.pop();
/*
for (iter = adj_list[node].begin(); iter != adj_list[node].end(); ++iter) {
if (! …Run Code Online (Sandbox Code Playgroud) 我正在四处玩groupby,以便对itertools有一个更好的感觉,因此我按照数字对元组列表进行了分组,并尝试获取结果组的列表.groupby然而,当我将结果转换为列表时,我得到一个奇怪的结果:除最后一组之外的所有组都是空的.这是为什么?我假设将迭代器转换为列表效率较低但从不改变行为.我猜这些列表是空的,因为遍历了内部迭代器但是何时/何地发生?
import itertools
l=list(zip([1,2,2,3,3,3],['a','b','c','d','e','f']))
#[(1, 'a'), (2, 'b'), (2, 'c'), (3, 'd'), (3, 'e'), (3, 'f')]
grouped_l = list(itertools.groupby(l, key=lambda x:x[0]))
#[(1, <itertools._grouper at ...>), (2, <itertools._grouper at ...>), (3, <itertools._grouper at ...>)]
[list(x[1]) for x in grouped_l]
[[], [], [(3, 'f')]]
grouped_i = itertools.groupby(l, key=lambda x:x[0])
#<itertools.groupby at ...>
[list(x[1]) for x in grouped_i]
[[(1, 'a')], [(2, 'b'), (2, 'c')], [(3, 'd'), (3, 'e'), (3, 'f')]]
Run Code Online (Sandbox Code Playgroud) 我现在正在学习Kotlin.
当我阅读Kotlin文档时,它写道我有ranges像Python 这样的技术(例如:1..10).但是,我尝试下面的代码,但失败了.
>>> print(i for i in 1..10)
...
error: expecting ')'
print(i for i in 1..10)
^
error: unexpected tokens (use ';' to separate expressions on the same line)
print(i for i in 1..10)
^
Run Code Online (Sandbox Code Playgroud)
有没有办法通过使用i for i in 1..10类似Python 来缩短此代码.
我是Java的新手.我只是在Collection Framework中寻找Iterator.但现在我想通过使用Iterator的remove()方法从ArrayList中删除所有null.所以尝试了下面的代码,但我没有得到预期的输出,因为我想要一个没有任何空值的列表.请解释一下谢谢.
这是我的代码
package setinterface;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Iterator;
import java.util.List;
public class InternalWorkingOfArrayList {
public static void main(String[] args) {
List<String> setOfString = new ArrayList<String>();
setOfString.add("A");
setOfString.add("B");
setOfString.add("C");
setOfString.add("B");
setOfString.add(null);
setOfString.add("A");
setOfString.add(null);
Iterator<String> iterator = setOfString.iterator();
while (iterator.hasNext()) {
String string = (String) iterator.next();
if (null==string) {
iterator.remove();
break;
}
}
for (String string1 : setOfString) {
System.out.println(string1);
}
}
}
Run Code Online (Sandbox Code Playgroud) iterator ×10
python ×5
for-loop ×2
java ×2
arraylist ×1
auto ×1
c++ ×1
c++11 ×1
collections ×1
cursor ×1
dictionary ×1
generator ×1
grouping ×1
if-statement ×1
iteration ×1
kotlin ×1
parsing ×1
python-3.x ×1
rust ×1