天天for循环,试试递归吧,思路太像while了,结构上是函数不在是循环。自学编程的第七年还是用上了。
1 输入数据
id drug
3003551 acridine dye; disinfecting agents and intercalating dyes
3005010 acridine dye; disinfecting agents and intercalating dyes
需要把每一个drug注释对应着id列下来
2 python递归实现
import sys, re, os
infile = "input.txt"
outfile = "out_2.txt"
# recursion
out = [] # 存储结果
def recurse_print(n, li):
# 行元素数,列表
if n == 2:
# 终止条件
out.append("{}\t{}\n".format(li[0], li[1]))
# id + 1st drug -> out list
else:
out.append("{}\t{}\n".format(li[0], li[n-1]))
# id + last drug -> out list
li.pop(n-1)
# remove last drug,列表减1
recurse_print(n-1, li) # recursion
# 元素数减1
# read file
with open(infile, 'r') as i:
for line in i:
line = line.strip()
line = re.split(r'\t|; | and ', line) # 按分隔符切割
length = len(line)
recurse_print(length, line) # 长度和列表
with open(outfile, 'w') as o:
for line in out:
o.write(line)
3 结果
id drug
3003551 intercalating dyes
3003551 disinfecting agents
3003551 acridine dye
3005010 intercalating dyes
3005010 disinfecting agents
3005010 acridine dye
核心
# recursion
out = [] # 存储结果
def recurse_print(n, li):
if n == 2:
# 终止条件
out.append("{}\t{}\n".format(li[0], li[1]))
# id + 1st drug -> out list
else:
out.append("{}\t{}\n".format(li[0], li[n-1]))
# id + last drug -> out list
li.pop(n-1) # remove last drug
recurse_print(n-1, li) # recursion
更多
Python 递归函数