当前位置: 首页 > 知识库问答 >
问题:

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

杨星纬
2023-03-14

问题:我希望编写一个脚本,同时循环两个列表,并将列表1中的日期替换为列表2中的日期。因此,很明显,您将使用清单2中的前70个日期替换清单1中的70个日期。之后,我希望将修改后的list1写入一个。txt文件。

我试过了,但我完全卡住了。我是Python的超级noob。

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.

共有1个答案

欧阳勇军
2023-03-14

可能是这样的(如果没有“date”字符串而没有后面的日期):

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个元素)的元组。在生成器中(即(如果a,x表示z中的y)部分),我将这个元组的部分分配给局部变量idx和s。生成器本身只产生索引,因为列表的实际项(因为s)并不重要,因为在生成器本身中,如果s=='date',我们会筛选感兴趣的项。在for循环中,我迭代这个生成器,将生成的值分配给IDX(这是另一个IDX,因为python中的生成器不再泄漏它们的局部变量)。生成器生成元素为'date'的列表的所有索引,并且for对其进行迭代。因此,对于所有感兴趣的索引,我将第二个列表中的下一个日期分配给旧列表的IDX+1项。

 类似资料:
  • 问题内容: 写一个方法 公共静态ArrayList merge(ArrayList a,ArrayList b) 合并两个数组列表,两个数组列表中的元素交替出现。如果一个数组列表短于另一个数组列表,则请尽可能长地交替,然后附加较长数组列表中的其余元素。例如,如果a是 1 4 9 16 b是 9 7 4 9 11 然后合并返回数组列表 1 9 4 7 9 4 16 9 11 我尝试做的是编写一个带i

  • 问题内容: 给出以下列表: 我想将[a]的每个元素重复其在[b]中的对应位置的编号,以产生此结果: 即0发生1次,5发生2次,1发生1次。 问题答案: 内容如下: -重复elem次 从两个列表中组成一个2元组的列表,将每个元素与另一个列表中的对应元素配对。这为您提供了用例中需要传递给的确切信息。 -将迭代器的结果列表展平为单个值列表。您既可以像我一样,也可以像马丁·彼得斯那样。

  • 问题内容: 如何进行for循环或列表理解,以便每次迭代都给我两个元素? 输出: 问题答案: 你需要一个实施。 对于Python 2: 或更笼统地说: 在Python 3中,你可以替换为内置函数,然后删除import。 所有信贷蒂诺对他的回答到我的问题,我发现这是非常有效的,因为它只是在列表上循环一次,并在此过程中不会产生任何不必要的名单。 注意:不要将其与Python自己的文档中的pairwise

  • 问题内容: 如何以简洁明了的方式找出两个列表中的第一个公共元素(在本例中为“ 2”)?任何列表都可以为空,也可以没有公共元素-在这种情况下,没有一个很好。 我需要它来向新手展示python,所以越简单越好。 UPD:顺序对于我的目的并不重要,但让我们假设我正在寻找x中的第一个元素,该元素也出现在y中。 问题答案: 这应该很简单 几乎和它一样有效 (要获得更有效的解决方案,请检查Ashwini Ch

  • 问题内容: 我必须搜索一个列表,然后用一个元素替换所有出现的元素。到目前为止,我在代码方面的尝试使我无处可寻,做到这一点的最佳方法是什么? 例如,假设我的列表具有以下整数 我需要将所有出现的数字1替换为值10,所以我需要的输出是 因此,我的目标是将数字1的所有实例替换为数字10。 问题答案:

  • 我有一个数字列表L。还有另一个数字列表M。我需要返回一个在L和M中找到的数字列表L。 编辑:从数学上讲,我正在寻找多集交点。 例子: L=3,,4,,5,,,6 M=,7,,,,1 L'=9,1,2,1 我为此编写了以下代码: 虽然它达到了目的,但我想知道是否有一种惯用的Perl6方法可以做到这一点? 一些背景:我一直在尝试一起学习Perl6和Python,并用这两种语言解决相同的难题。Pytho