鱼C论坛

 找回密码
 立即注册
查看: 2679|回复: 8

[技术交流] python循环打开文件、列表

[复制链接]
发表于 2018-1-1 11:41:03 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
大家交流一下,关于列表,有没有更简化的
(1)循环打开多个文件编号后缀为0,1,2,...等的文件:
  1. for j in range(0,11):
  2.         filename='wnp%s.ms0'%j
  3.         f=open(filename,'r+')
  4. #此处print就是为了检查文件名是否正确确定
  5.         print(f)
  6. #这里打开wnp0.ms0,wnp1.ms0,...wnp10.ms0这些文件
复制代码


(2)循环给多个列表赋值如[2]:
  1. lis=[]
  2. lis1=[]
  3. lis2=[]
  4. lis3=[]
  5. lis4=[]
  6. lis5=[]
  7. lis6=[]
  8. lis7=[]
  9. lis8=[]
  10. lis9=[]
  11. lis10=[]
  12. #有没有能把循环得到多个空列表简化一下,名字就是像这样有规律
  13. for j in range(1,11):
  14.     dict={1:lis1,2:lis2,3:lis3,4:lis4,5:lis5,6:lis6,7:lis7,8:lis8,9:lis9,10:lis10}
  15.     llis=dict[j]
  16.     llis.append(2)
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2018-1-1 12:53:51 | 显示全部楼层
本帖最后由 yjsx86 于 2018-1-1 12:59 编辑

首先你的代码有问题
如果只是批量生产有规律的变量可以
1 自己构造
2 用locals() #给个例子

  1. #生产变量如lis1 lis2 默认空列表
  2. for i in range(1,11):
  3.     locals()['lis%d' % i] = []
  4. #打印lis1~lis10变量
  5. for i in range(1,11):
  6.     print(eval('lis%d' % i))
复制代码


想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-1-2 08:56:54 | 显示全部楼层
yjsx86 发表于 2018-1-1 12:53
首先你的代码有问题
如果只是批量生产有规律的变量可以
1 自己构造

好像不行啊,我这里这样处理列表是为了后面用的,但是我试了按照你的方法locals()函数这个循环,报错说'lis0' is not defined
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-1-2 11:57:34 | 显示全部楼层
亭ting 发表于 2018-1-2 08:56
好像不行啊,我这里这样处理列表是为了后面用的,但是我试了按照你的方法locals()函数这个循环,报错说'l ...

我给的例子从lis1开始
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-1-3 09:06:32 | 显示全部楼层
yjsx86 发表于 2018-1-2 11:57
我给的例子从lis1开始

我想要不是打印出空列表,初始给一些列列表赋值,之后能继续给这些列表不错元素,就像我上面代码那样。
你的代码没有问题,但是我在我的内容里用你的代码替换,又试了一下,
(1)把你的代码里改成rang(0,11),仍报错lis0 is not defind
(2)我不动你的代码,自己补充个lis0,它会报错lis1 is not defind
不好意思,请问应该怎么做
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-1-3 14:31:51 | 显示全部楼层
  1. #生产变量如lis0 lis1 默认空列表 并打印出来
  2. for i in range(0,11):
  3.     locals()['lis%d' % i] = []
  4.     print('lis%d : %s' % (i,eval('lis%d' % i)))

  5. #单独给变量lis3 append(6)
  6. lis3.append(6)

  7. #全部变量append(2)打印lis0~lis10变量
  8. for i in range(0,11):
  9.     eval('lis%d' % i).append(2)
  10.     print('lis%d : %s' % (i,eval('lis%d' % i)))
复制代码



                               
登录/注册后可看大图


想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

 楼主| 发表于 2018-1-4 09:03:18 | 显示全部楼层

你的代码我试了,你的代码一点问题都没有,但是我用来替换我代码中数列那一段,就一直报错,我也很无语。
非常感谢你的热心帮助,应该是我代码的问题
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-1-5 14:21:16 | 显示全部楼层

我明白了,你这种仍是字符串,lis0,lis1这些仍是字符串,给字符串赋值'[]',而不是列表,虽然打印出来是那样子的形势liso=[],但是无法进行列表操作。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-1-5 14:27:35 | 显示全部楼层
本帖最后由 yjsx86 于 2018-1-5 14:31 编辑
亭ting 发表于 2018-1-5 14:21
我明白了,你这种仍是字符串,lis0,lis1这些仍是字符串,给字符串赋值'[]',而不是列表,虽然打印出来是那 ...


lis0 lis1这些已经不是字符串了
你print(type(lis0))试试
显示是list 而不是str

可以单独对这些变量进行list的操作
比如上面我单独把lis3进行了append操作
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-4-24 00:58

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表