首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Python:迭代两个列表,并用list2中的元素替换一个list1中的元素

Python:迭代两个列表,并用list2中的元素替换一个list1中的元素
EN

Stack Overflow用户
提问于 2013-01-22 06:56:10
回答 1查看 1.4K关注 0票数 2

我有两个字符串列表。在包含大约1000个字符串元素的list1中,有一个随机出现的名为" Date“的字符串,后面紧跟一个包含特定日期的字符串:"17/09/2011”。这种情况大约会发生70次。在List2中:我有大约80个日期,作为字符串。

问:我想写一个脚本,同时循环这两个列表,并按顺序用list2中的日期替换list1中的日期。因此,很明显,您将用list2的前70个日期替换list1中出现的70个日期。然后,我想将修改后的list1写入到.txt文件中。

我试过了,但我完全卡住了。我是Python的新手。

代码语言:javascript
运行
复制
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.
EN

回答 1

Stack Overflow用户

发布于 2013-01-22 07:10:16

可能是这样的(如果没有不带日期的'date‘字符串):

代码语言:javascript
运行
复制
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,因为python中的生成器不再泄漏它们的局部变量)。生成器生成元素为'Date‘的列表的所有索引,for遍历该列表。因此,对于所有感兴趣的索引,我将第二个列表中的下一个日期分配给旧列表的idx+1st项。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14448710

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档