如何在Python中循环遍历列表的索引?

3
我正在尝试写入一个文件,第一行是列表中的[0],第二行是[1],以此类推。
以下是一个快速示例:
crimefile = open('C:\states.csv', 'r')
b = crimefile.read()
l = b.splitlines()
print l[1]

states = open('c:\states.txt', 'w')
states.write('"abc"' + " " + '%s' '\n' %l[0+=])

states.close()

我对Python中的循环非常陌生,对于循环以及如何在循环中增加整数还不够确定。

3个回答

6

使用enumerate()函数:

for ind,line in enumerate(l):
    print ind,line

示例:

In [55]: lis=['a','b','c','d','e','f']
In [57]: for i,x in enumerate(lis):
    print i,x
   ....:     
   ....:     
0 a
1 b
2 c
3 d
4 e
5 f

或者使用len()xrange()

In [59]: for i in xrange(len(lis)):     #use range() in case of python 3.x
   ....:     print i,lis[i]
   ....:     
   ....:     
0 a
1 b
2 c
3 d
4 e

3
当然,这和许多其他用例实际上并不需要使用enumerate -- 你可以直接使用for line in l: ... - user395760
哦,好的,这个有点超出我能理解的范围了...虽然我不会再问更多问题了,但我会仔细研究一下。谢谢兄弟。 - Adam Magyar

0

我不太确定我理解你的问题,但无论如何这是我解决它的方式:

f = open('C:\states.csv', 'r')
states = open('c:\states.txt', 'w')

for line in f:
    states.write('"abc"  %s\n' % line)

f.close()
states.close()

1
你可以通过使用with open(<filename>) as file上下文管理器语法来改进这个解决方案,这样你就不必担心显式关闭文件了。 - Ctrlspc
我觉得你解决得更加优雅,所以谢谢 :) 快问一下,为什么在第5行参数的字符串后面的换行符之前有个%(看起来像是单引号)? - Adam Magyar
哦,很抱歉那是个打字错误,我已经修复了。此外,由于你的字符串似乎是-"abc" [thevalue]\n- 我看不出将字符串分成更小的部分有什么意义。 - Daniel Figueroa

0
这是一种“pythonic”的解决方案:
l = ['a', 'b', 'c', 'd']
with open('outfile', 'w') as f:
    f.write('\n'.join(l))

我对你的'abc'这个东西不太确定,但是考虑到你需要它,这可能是一个解决方案:

'\n'.join(['"abc" %s' % e for e in l])

使用 '\n'.join 时经常被忽视的一个问题是,在最后一行你不会得到 \n 字符。有一两次,这导致了一个处理工具的故障,因为它没有足够的鲁棒性。 - DSM

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接