当我反复遍历ArrayList时,我得到一个IndexOutOfBoundsException.我尝试进行前向迭代,没有问题.我希望并知道列表中有五个元素.代码如下:
Collection rtns = absRtnMap.values();
List list = new ArrayList(rtns);
Collections.sort(list);
for(int j=list.size();j>0;j=j-1){
System.out.println(list.get(j));
}
Run Code Online (Sandbox Code Playgroud)
前向迭代 - 工作正常,但对我没用:
for(int j=0;j<list.size();j++){
System.out.println(list.isEmpty());
System.out.println(list.get(j));
} // this worked fine
Run Code Online (Sandbox Code Playgroud)
错误:
Exception in thread "Timer-0" java.lang.IndexOutOfBoundsException: Index: 3, Size: 3
at java.util.ArrayList.RangeCheck(Unknown Source)
at java.util.ArrayList.get(Unknown Source)
at model.Return.getReturnMap(Return.java:61)
at controller.Poller$1.run(Poller.java:29)
at java.util.TimerThread.mainLoop(Unknown Source)
at java.util.TimerThread.run(Unknown Source)
Run Code Online (Sandbox Code Playgroud)
此外,如果有人知道反向迭代更好的习语,我很乐意尝试这一点.
我正在阅读一些PNG数据,每个像素有4个通道.我想一次迭代数据1个像素(意味着每4个元素= 1个像素,rgba).
red_channel = 0
while red_channel < len(raw_png_data):
green_channel, blue_channel, alpha_channel = red_channel +1, red_channel +2, red_channel +3
# do something with my 4 channels of pixel data ... raw_png_data[red_channel] etc
red_channel += 4
Run Code Online (Sandbox Code Playgroud)
这种方式看起来并不"正确".是否有更多的Pythonic方法迭代序列,一次4个项目,并将这4个项目解压缩?
假设您想要在迭代不提供随机访问迭代器的容器时知道元素的数字索引.例如:
std::list<std::string> items;
int i = 0;
for (auto & item : items) item += std::to_string(i++);
Run Code Online (Sandbox Code Playgroud)
是否有更惯用或更好的方式来做到这一点?我认为这种模式会出现在各种情况下.我不喜欢在循环之外可用的整数索引.包围循环和本地块中的索引定义似乎也很难看.
当然,当容器提供随机访问迭代器时,可以利用迭代器差异,但是你不能使用range-for:
std::vector<std::string> items;
for (auto it = items.begin(); it != items.end(); ++it)
*it += std::to_string(it - items.begin());
Run Code Online (Sandbox Code Playgroud)
虽然我只展示了C++ 11的例子,但我也在寻找C++ 0x和C++ 98的提示.
假设您有一个包含许多行和多列的数据框.
列有名称.您希望按编号访问行,按名称访问列.
例如,循环遍历行的一种(可能很慢)方法是
for (i in 1:nrow(df)) {
print(df[i, "column1"])
# do more things with the data frame...
}
Run Code Online (Sandbox Code Playgroud)
另一种方法是为单独的列(如column1_list = df[["column1"])创建"列表" ,并在一个循环中访问列表.这种方法可能很快,但如果要访问许多列,也会很不方便.
是否有一种快速循环数据帧行的方法?其他一些数据结构是否更适合快速循环?
我在jsp中获得了一个对象列表'myList'.我得到的对象属于'MyClass'.我想通过JSTL迭代这个列表.
JSP代码如下:
<c:forEach items="myList" var="element">
<tr>
<td>${element.getStatus()}</td>
<td>${element.getRequestType()}</td>
<td>${element.getRequestedFor()}</td>
<td>${element.getTimeSubmitted()}</td>
</tr>
</c:forEach>
Run Code Online (Sandbox Code Playgroud)
我得到例外:
00000024 WebApp E [Servlet Error]-[/requestHistory.jsp]: com.ibm.ws.jsp.translator.JspTranslationException: JSPG0227E: Exception caught while translating /requestHistory.jsp:
/requestHistory.jsp(31,6) --> JSPG0122E: Unable to parse EL function ${UserProcessRequests.getStatus()}.
Run Code Online (Sandbox Code Playgroud)
我正在使用的Taglib是:
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<%@ page isELIgnored="false"%>
Run Code Online (Sandbox Code Playgroud) 在Python 2(2.7,更准确地说)中,我想以递减计数顺序迭代collections.Counter实例.
>>> import collections
>>> c = collections.Counter()
>>> c['a'] = 1
>>> c['b'] = 999
>>> c
Counter({'b': 999, 'a': 1})
>>> for x in c:
print x
a
b
Run Code Online (Sandbox Code Playgroud)
在上面的示例中,似乎元素按照它们添加到Counter实例的顺序进行迭代.
我想从最高到最低迭代列表.我看到Counter的字符串表示就是这样,只是想知道是否有推荐的方法来做到这一点.
我在Python中创建了一个多维数组,如下所示:
self.cells = np.empty((r,c),dtype=np.object)
Run Code Online (Sandbox Code Playgroud)
现在我想迭代我的二维数组的所有元素,我不关心顺序.我该如何实现这一目标?
我想要一个算法迭代列表切片.切片大小设置在功能之外,可以有所不同.
在我看来它是这样的:
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个成员将被存储并附加到下一个列表的开头.
例如,这是预期螺旋的形状(以及迭代的每个步骤)
y
|
|
16 15 14 13 12
17 4 3 2 11
-- 18 5 0 1 10 --- x
19 6 7 8 9
20 21 22 23 24
|
|
Run Code Online (Sandbox Code Playgroud)
线条是x和y轴.
这将是算法在每次迭代时"返回"的实际值(点的坐标):
[0,0],
[1,0], [1,1], [0,1], [-1,1], [-1,0], [-1,-1], [0,-1], [1,-1],
[2,-1], [2,0], [2,1], [2,2], [1,2], [0,2], [-1,2], [-2,2], [-2,1], [-2,0]..
Run Code Online (Sandbox Code Playgroud)
等等
我已经尝试过搜索,但我不确定要搜索什么,我尝试过的搜索结果是什么.
我甚至不确定从哪里开始,除了凌乱,不优雅和特殊的东西,比如为每一层创建/编码新的螺旋.
任何人都可以帮助我开始吗?
此外,有没有一种方法可以轻松地在顺时针和逆时针(方向)之间切换,以及从哪个方向"开始"螺旋?(轮换)
还有,有办法递归吗?
我的应用程序
我有一个填充了数据点的稀疏网格,我想在网格中添加一个新的数据点,并使其与给定的其他点"尽可能接近".
为此,我将调用grid.find_closest_available_point_to(point),它将迭代上面给出的螺旋并返回第一个空位且可用的位置.
首先,它会检查point+[0,0](只是为了完整性).然后它会检查point+[1,0].然后它会检查point+[1,1].然后point+[0,1],返回第一个网格中的位置为空(或者没有被数据点占用)的网格.
网格大小没有上限.
我试图使用HashMap将唯一的字符串映射到字符串ArrayList,如下所示:
HashMap<String, ArrayList<String>>
Run Code Online (Sandbox Code Playgroud)
基本上,我希望能够通过编号访问密钥,而不是使用密钥的名称.我希望能够访问所述密钥的值,迭代它.我想象的是这样的:
for(all keys in my hashmap) {
for(int i=0; i < myhashmap.currentKey.getValue.size(); i++) {
// do things with the hashmaps elements
}
}
Run Code Online (Sandbox Code Playgroud)
是否有捷径可寻?