我有两个字符串列表。在包含大约 1000 个字符串元素的 list1 中,有一个随机出现的名为“Date”的字符串,紧随其后的是包含特定日期的字符串:“17/09/2011”。这种情况大约发生 70 次。在 List2 中:我有大约 80 个日期,作为字符串。
问题: 我想编写一个脚本,同时循环遍历两个列表,并按顺序用 list2 中的日期替换 list1 中的日期。因此,显然您将用 list2 的前 70 个日期替换 list1 中出现的 70 个日期。然后我想将修改后的list1写入.txt文件。
我尝试过这个,但我完全卡住了。我是 Python super 菜鸟。
def pairwise(lst):
""" yield item i and item i+1 in lst. e.g.
(lst[0], lst[1]), (lst[1], lst[2]), ..., (lst[-1], None)
"""
if not lst: return
#yield None, lst[0]
for i in range(len(lst)-1):
yield lst[i], lst[i+1]
yield lst[-1], None
for line in file:
list1.append(line.strip())
for i,j in pairwise(list1):
for k in list2:
if i == "Date":
list1."replace"(j) # Dont know what to do. And i know this double for looping is wrong also.
最佳答案
也许是这样的(如果没有不带以下日期的“日期”字符串):
iter2 = iter (list2)
for idx in (idx for idx, s in enumerate (list1) if s == 'Date'):
list1 [idx + 1] = next (iter2)
with open ('out.txt', 'w') as f:
f.write ('{}'.format (list1) )
@user1998510,这里有一些解释:
enumerate
将列表作为参数并生成 (i,列表的第 i 个元素) 形式的元组。在我的生成器(即 (x for y in z if a)
部分)中,我将此元组的部分分配给局部变量 idx 和 s。生成器本身仅生成索引,因为列表的实际项目(对于 s
)并不重要,因为在生成器本身中,我们过滤有趣的项目 if s == 'Date '
。在 for 循环中,我迭代此生成器,将其生成的值分配给 idx(这是另一个 idx,而不是内部 idx) code> 因为 python 中的生成器不再泄漏它们的局部变量)。生成器生成元素为“Date”的列表的所有索引,并且 for
对其进行迭代。因此,我将第二个列表中的下一个日期分配给旧列表中所有感兴趣索引的 idx+第一项。
关于Python:迭代两个列表并将一个 list1 中的元素替换为 list2 中的元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14448710/