迭代Python数组

时间:2015-08-05 16:36:16

标签: python loops logic

我在以下代码中遇到逻辑错误:

while count < 5:
    row = next(csv_f)
    if row[0] != currentID:
        userArray.append(Users(row[0]))
        currentID = row[0]
        count = count+1

    userArray[len(userArray)-1].addUsageData(row[1],row[3])

它循环遍历每个用户,直到ID发生变化,总共执行五次。

一切正常,但是我从行[1]获得的使用数组中的最后一个索引始终是下一个userID块中的第一个索引。它就像执行if块时len(userArray)没有更新一样。

1 个答案:

答案 0 :(得分:0)

最后一次row[0] != currentID时,count增加到5.这 在任何后续行之前,您会立即突破while-loopcsv_f处理。如果addUsageData正在累积数据,则这就是最终user只有一行数据的原因。

您可以使用itertools.groupbyitertools.islice修补此问题:

import itertools as IT
import operator

userArray = []
for currentID, grp in IT.islice(IT.groupby(csv_f, key=operator.itemgetter(0)), 5):
    user = Users(currentID)
    userArray.append(user)
    for row in grp:
        user.addUsageData(row[1], row[3])