Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/azure/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python:迭代两个列表,并用列表2中的元素替换一个列表1中的元素_Python_List_Loops - Fatal编程技术网

Python:迭代两个列表,并用列表2中的元素替换一个列表1中的元素

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的超级高

我有两个字符串列表。在包含大约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。生成器本身只生成索引,因为列表的实际项(到whit
s
)并不重要,因为在生成器本身中,如果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) )