Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/289.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 枚举计数器卡在0上_Python - Fatal编程技术网

Python 枚举计数器卡在0上

Python 枚举计数器卡在0上,python,Python,我正试图重写某人的旧代码以合并新信息。对于代码的其余部分,enumerate部分看起来非常重要,因此我正在尝试找出如何让它工作 无论何时我尝试做: import spssaux, spss, collections from operator import itemgetter from collections import Counter def create_vars(): vdict=spssaux.VariableDict() varlist = ['ID','ID2

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

无论何时我尝试做:

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()
我的输出是:

for i,v in enumerate(lst):
    print(i)
但预期的结果是:

0
0
0
0
0
0
0
0

有什么建议吗?

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

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


(如前所述,您也在跟踪外部
i
那里)

开始程序Python3。
结束程序。
不是有效的Python语法。你到底在干什么?不管怎样,内置的
枚举
实现了您期望的功能,而不是您报告看到的功能;因此,问题一定出在其他地方(例如,用其他地方的不同函数替换内置的
enumerate
)。因此,在可用信息方面无法帮助您。打印时,您的lst正好是1个元素,因此索引始终为0。我们没有足够的信息说明此代码应该执行什么操作,因此无法告诉您如何修复它,但是王冰的评论正确地解释了观察到的行为。@KarlKnechtel这是一个SPSS python函数。是的,它是。通过执行
lst=[]
,然后立即执行
lst.append([UniqueDefID.rstrip()])
,您将生成一个包含一个元素的列表。虽然名称重用绝对是一个糟糕的想法,但Python范围规则不是这样工作的,更改名称并不能修复观察到的错误。这并不能修复它,但是谢谢你关于重用名称的提示。当我打印UniqueDefID时,我得到了7个不同的值?不只是一个或一个相同的值。打印UniqueDefID时,会得到一个字符串,其文本似乎包含“7个不同的值”(即,由空格分隔的数字字符序列)。不管怎么说,这是一个非常粗略的猜测。您显示的代码不包括
UniqueDefID
的来源。无论如何,你似乎有很多基本的误解。它将帮助您确保理解类型的概念,并确保您知道如何验证程序中每个值的类型,然后执行此操作。@NateLeMay当您对其调用
rstrip()
时,我假设它是一个字符串?无论如何,您要将它放在一个列表中(注意
append
调用中的方括号),然后再追加它,因此假设您的UniqueDefID是
“1,2”
,那么您的最终
列表将是
[[“1,2”]
。首先,要将一个列表“添加”到另一个列表,您可以调用
list.extend(其他列表)
。其次,您可能需要
.split()
您的UniqueDefID。
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)