初级问题:迭代和压缩

嗨,小组,
我对函数内置的ZIP有一个基本问题.
我正在编写一个简单的文本文件比较脚本,该脚本比较行
按线和性格划分.输出是原始文件,
用X代替任何不同的字符.
我已经管理了固定(3)个文件数的解决方案,但我想要
任何数量的输入文件的解决方案.
我的解决方案的轮廓:
对于zip中的vec(vec_list [0],vec_list [1],vec_list [2]):
res ='''
要进入Zip(VEC [0],VEC [1],VEC [2]):
如果Len(set(entry))1:
res = res+'x'
别的:
res = res+条目[0]
outfile.write(res)
因此,vec是一个元组,包含每个文件中的一行,然后输入为
元组从每一行遏制一个角色.
2个问题
1)什么是一般解决方案.以这种方式使用ZIP看起来不错.是
还有另一个功能可以执行我想要的
2)我正在使用设置来删除任何重复的字符.有没有
"更好的方法 ?
任何其他评论/建议都赞赏.
谢谢,
史蒂文

# 回答1

mo ho@yahoo.co.uk写道:
您应该看一下Python的Difflib库.我可能已经做了
您正在尝试"重新发明".
-larry
# 回答2


在12 juil,20:55,moo ...@yahoo.co.uk写道:
邮政编码(主要)还可以.您缺少的是如何将其用于任何
任意数量的序列.反试试:
[[0,1,2,3,4],[5,6,7,7,8,9,10],[11,12,13,14,15]
....打印项目
...
(0、5、11)
(1,6,12)
(2、7、13)
(3、8、14)
(4、9、15)
....打印项目
...
(0、5、11、16)
(1、6、12、17)
(2、7、13、18)
(3、8、14、19)
Zip()唯一的警告是,它将仅使用尽可能多的项目
在您的较短序列中,即:
[(0,0),(1,1),(2,2)]
[(0,0),(1,1),(2,2),(3,3),(4,4),(5,5),(6,6),(7,7) 8,
8),(9,9)]
因此,您最好将序列添加到序列中,只要长时间
一.使用ITERTOOLS软件包有一些成语
链条和重复迭代器,但我将留下具体的例子作为一个
向读者锻炼! - )
那可能也是我要做的.
标准LIB中有一个Difflib软件包.你试试过吗?
# 回答3

mo ho@yahoo.co.uk写道:
zip(*vec_list)将将vec_list中的所有条目拉开
请注意,ZIP在最短的峰值上停止.因此,如果Vec [1]是
比VEC [0]短,否则匹配,您的输出线将是
截断.或者,如果VEC [1]更长,并且VEC [0]匹配到它的发展,则
也不会有信号.
res = rex+可以写入res+=任何东西的任何东西
我可能已经写了第三个循环,将VEC [0]与Vec [1] ...进行比较,但是
您的设置解决方案更容易,更漂亮.
如果速度是问题,请不要通过CHAR重建输出线CHAR.只是
更改可变副本中所需的内容.无论如何,我更喜欢这个.
res = list(vec [0])#如果全部ASCII,则在3.0中使用ByTearray
对于n,枚举(zip(vec [0],vec [1],vec [2])):
如果Len(set(entry))1:
res [n] ='x'
outfile.write(''.join(res))#在3.0中,写(res)
tjr
# 回答4

在12月12日,21:50," bruno.desthuilli ...@gmail.com"
[[0,1,2,3,4],[5,6,7,7,8,9,10],[11,12,13,14,15] >>对于zip中的项目(*列表):
...打印项目
...
(0、5、11)
(1,6,12)
(2、7、13)
(3、8、14)
(4、9、15)
这个 *lis操作叫什么?我很难找到任何
在Python文档或书籍学习Python中引用它.
标准LIB中有一个Difflib软件包.你试试过吗?
我会检查一下,但我是新手,所以我将其写为
(有用)学习练习.
谢谢您的帮助
史蒂文
# 回答5

mo ho@yahoo.co.uk写道:
一个人可能称此论点解开包装,但是
语言手册 /表达式 /初选 /呼叫
简单地称其为 *表达语法.
"如果语法 *表达式出现在函数调用中,则必须表达式
评估序列.该序列中的元素好像
他们是其他立场论点;如果有位置
参数x1,...,* xn*,表达式评估为序列
y1,...,*ym*,这等同于带有M+N位置参数的调用
x1,...,*xn*,*y1*,...,*ym*.
请参阅《镜像语法》中的复合语句 /功能定义
定义.
tjr
# 回答6


>
请注意,从Python 3.0中有另一种形式的拉链
阅读直到所有列表都用尽,另一个列表被填写
具有可设置的默认值.很有用!
# 回答7


在13年7月13日,19:49,特里·里迪(Terry Reedy) 一个人可能称此论点解开包装,但是
语言手册 /表达式 /初选 /呼叫
简单地称其为 *表达语法.
"如果语法 *表达式出现在函数调用中,则必须表达式
评估序列.该序列中的元素好像
他们是其他立场论点;如果有位置
参数x1,...,* xn*,表达式评估为序列
y1,...,*ym*,这等同于带有M+N位置参数的调用
x1,...,*xn*,*y1*,...,*ym*.
请参阅《镜像语法》中的复合语句 /功能定义
定义.
tjr
谢谢,
开始有意义:-)
史蒂文

标签: python

添加新评论