Python:迭代两个列表,并用列表2中的元素替换一个列表1中的元素
我有两个字符串列表。在包含大约1000个字符串元素的列表1中,有一个名为“Date”的字符串随机出现,后面紧跟着一个包含特定日期的字符串:“17/09/2011”。这种情况大约发生70次。在清单2中:我有大约80个日期,作为字符串 问题: 我想编写一个脚本,同时在两个列表中循环,并按顺序将列表1中的日期替换为列表2中的日期。因此,显然,您将使用列表2中的前70个日期替换列表1中出现的70个日期。之后,我想将修改后的list1写入一个.txt文件 我试过了,但我完全卡住了。我是Python的超级高手Python:迭代两个列表,并用列表2中的元素替换一个列表1中的元素,python,list,loops,Python,List,Loops,我有两个字符串列表。在包含大约1000个字符串元素的列表1中,有一个名为“Date”的字符串随机出现,后面紧跟着一个包含特定日期的字符串:“17/09/2011”。这种情况大约发生70次。在清单2中:我有大约80个日期,作为字符串 问题: 我想编写一个脚本,同时在两个列表中循环,并按顺序将列表1中的日期替换为列表2中的日期。因此,显然,您将使用列表2中的前70个日期替换列表1中出现的70个日期。之后,我想将修改后的list1写入一个.txt文件 我试过了,但我完全卡住了。我是Python的超级高
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.
可能是这样的(如果没有“日期”字符串而没有后续日期):
@user1998510,这里有一点解释:
enumerate
将列表作为参数,并生成以下形式的元组(列表的第i个元素)。在我的生成器中(即(x代表y,z代表a)
部分),我将这个元组的部分分配给局部变量idx和s。生成器本身只生成索引,因为列表的实际项(到whits
)并不重要,因为在生成器本身中,如果s==“Date”,我们会过滤感兴趣的项。在for
循环中,我遍历该生成器,将其生成的值分配给idx
(这是另一个idx
,而不是内部idx
,因为python中的生成器不再泄漏其局部变量)。生成器生成元素为“Date”的列表的所有索引,并且的对其进行迭代。因此,我将第二个列表中的下一个日期指定给所有感兴趣的索引的旧列表的idx+1项。zip(lst,lst[1:])
应该这样做。提示:最好的方法是构造一个新列表,而不是修改旧列表。使用list2iter(list2)
而不是idx2
计数器,然后list1[idx1+1]=循环中的下一个(list2iter)
。感谢您的支持。你能告诉我需要学习什么函数才能理解你的代码吗?Iter和枚举我猜?
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) )