枚举计数器卡在0上

2024-10-01 19:20:05 发布

您现在位置:Python中文网/ 问答频道 /正文

import spssaux, spss, collections
from operator import itemgetter
from collections import Counter

def create_vars():

    vdict=spssaux.VariableDict()
    varlist = ['ID','ID2', 'Var1','Var2', 'Var3', 'Var4']
    donthave=[v for v in varlist if v not in vdict]

    for i in range(len(donthave)):
        myvar=donthave[i]
        spss.Submit(r'NUMERIC %s' %(myvar))
        #spss.Submit(r'ALTER TYPE %s (ADATE10)' %(myvar))
        
    
    def repeat(lst, dt1, dt2, dt3, dt4):
        if dt1: date=dt1
        elif dt2: date=dt2
        elif dt3: date=dt3
        elif dt4: date=dt4
        else: date=None
        for i in range(len(lst)):
            lst[i].append(date)
    
    def rcnv():
    
        index=spssaux.VariableDict().VariableIndex
        v_idx=[index(v) for v in varlist]
        
        vals = [None] * len(v_idx)
        row_to_all=[]
        for i,v in enumerate(v_idx):
            row_to_all.append(i)
        
        cur=spss.Cursor(var=v_idx, accessType='w')
        #cvtDates="ALL"
        for i in range(cur.GetCaseCount()):
            row=cur.fetchone()
            for i,v in enumerate(row):
                j=row_to_all[i]
                vals[j]=v
            
              
            (ID1, ID2, Var1, Var2, Var3, Var4) = vals
            lst=[]
            lst.append([UniqueDefID.rstrip()])
            for i,v in enumerate(lst):
                print(i)
            
    rcnv()
          
create_vars()

我正试图重写某人的旧代码以合并新信息。enumerate部分对于代码的其余部分看起来非常重要,因此我正在尝试找出如何让它工作

无论何时我尝试做:

for i,v in enumerate(lst):
    print(i)

我的输出是:

0
0
0
0
0
0
0
0

但预期的结果是:

0
1
2
3
4
5
6
7

有什么建议吗


Tags: inimportfordatelendefrangerow
2条回答

看起来您的有问题的循环嵌套在另一个已经使用i作为索引计数器的循环中。因此,您实际上是在引用顶层i。尝试将i更改为嵌套循环中的其他内容,它应该可以工作

def create_vars():
    ...
    def rcnv():
       ...
       for i in range(cur.GetCaseCount()):                # Outer Loop
            ...
            lst=[]                                        # List creation
            lst.append([UniqueDefID.rstrip()])            # List append
            for i,v in enumerate(lst):                    # Inner Loop
                print(i)

你有两个嵌套的循环,在外部,你在循环你的案例计数,但在循环中,你在创建一个新的列表,在其中附加一个元素,然后在这个元素列表上循环;因此,您总是在那里获得第一个索引

(如前所述,您还将在那里跟踪您的外部i

相关问题 更多 >

    热门问题