反复迭代较小的列表以将元素一次分配给较大的列表?

我有一个较大的列表,我想对其进行分配或以其他方式对较小列表的元素执行操作,但只执行一次。例如:


emailList = ['tom@gmail.com', 'dick@gmail.com', 'harry@gmail.com', 'jane@gmail.com']

fileList = ['file_1.zip', 'file_2.zip']

我想交替地将 fileList 的元素分配给 emailList 的元素。所以:


tom@gmail.com -> file_1.zip

dick@gmail.com -> file_2.zip

harry@gmail.com -> file_1.zip

jane@gmail.com -> file_2.zip

我有这个......一半工作(为了简单起见,我只是使用 print 语句来表示动作):


    for email in emailList:

        for file in zippedList:

            print(email + "will receive " + file)

            zippedList.pop(0)

产量:


    Email: tom@gmail.com

    will receive Contest_Packet_1.zip

    Email: dick@gmail.com

    will receive Contest_Packet_2.zip

当然,问题是一旦 zippedList 为空,它就结束,并且不再进行进一步的分配。但是,当我不弹出较小列表的元素时,较大列表的元素都会获得分配或以其他方式操作的较小列表中的两个元素。它产生这样的结果:


    Email: tom@gmail.com

    will receive Contest_Packet_1.zip

    Email: tom@gmail.com

    will receive Contest_Packet_2.zip

    Email: dick@regula.one

    will receive Contest_Packet_1.zip

    Email: dick@regula.one

    will receive Contest_Packet_2.zip

    Email: harry@gmail.com

    will receive Contest_Packet_1.zip

    Email: harry@gmail.com

    will receive Contest_Packet_2.zip

    Email: jane@gmail.com

    will receive Contest_Packet_1.zip

    Email: jane@gmail.com

    will receive Contest_Packet_2.zip

当然有一种更简单的方法可以做到这一点。想法?


DIEA
浏览 90回答 1
1回答

神不在的星期二

可能最简单的方法是根据当前迭代的索引是否为偶数来分配值。您可以为此使用enumerate() 。下面的代码将当前列表索引分配给索引变量,并将当前电子邮件分配给电子邮件变量。现在只需单步执行并将值一个接一个地分配给列表即可:emailList = ['tom@gmail.com', 'dick@gmail.com', 'harry@gmail.com', 'jane@gmail.com']fileList = ['file_1.zip', 'file_2.zip']for index, email in enumerate(emailList):      if index %2 ==0 : # Even numbers            print(f"Email: {email}, File: {fileList[0]}")      else: # odd numbers            print(f"Email: {email}, File: {fileList[1]}")
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python