计算从0开始的列表

时间:2013-04-18 21:21:46

标签: python python-2.7

到目前为止,这是我的代码,它是一个基于文本的文件浏览器。用户通过选择分配的号码来选择要浏览的驱动器或目录。运行脚本时,它会显示从0到任意数量的项目的输出。但是当显示文件夹的内容时,它会从1开始列出,这会抛弃您的选择。

from os import listdir
import win32api

#need help with this block
def glist(path):
    global nlist
    nlist = []
    for i in listdir(path):
        nlist.append(i)
        countf=len(nlist)
        print str(countf) + " " + str(i)

def getfiles(dir, filename):
    for i in listdir(dir):
        newtext=open(filename,'a')
        newtext.write("\n"+ "\n" + i)
        newtext.close()

def getdrives():
    global drives
    drives = win32api.GetLogicalDriveStrings()
    drives = drives.split('\000')[:-1]
    for index, item in enumerate(drives):

      print index, item


print "Select which drive to work with: "
getdrives()

x = raw_input("Which Drive:")
glist(drives[int(x)])

y = raw_input("Select Folder: ")
glist(drives[int(x)] + nlist[int(y)])

2 个答案:

答案 0 :(得分:1)

写得更好:

def glist(path):
    global nlist
    for idx, name in enumerate(listdir(path)):
        print '{} {}'.format(idx, name) 
    nlist.append(name)

但是会重新考虑使用global并从中返回一个列表......

答案 1 :(得分:0)

列表的长度比该列表中的最大索引多一个。

def glist(path):
    global nlist
    nlist = []
    for i in listdir(path):
        nlist.append(i)
        # Just subtract 1
        countf=len(nlist) - 1
        print str(countf) + " " + str(i)

也就是说,在每次迭代时重新计算列表的长度可能很昂贵,特别是当你知道它在每一步增长1时。你可以通过enumerate免费获得countf(当然,它是零索引的)。

def glist(path):
    global nlist
    nlist = []
    for countf, i in enumerate(listdir(path)):
        nlist.append(i)
        print str(countf) + " " + str(i)