如何比较两个条件的两个列表?

New*_*101 3 python for-loop list

我特意尝试做什么

symbol_list = ["....firstline.\\.||hi",
               "pythonisasnake..\....",
               "||||last.\\|line\\..."]

normal_list = ["ABCDfirstlineEFGHIJhi",
               "pythonisasnakeKLMNOPQ",
               "RSTUlastVWXYlineZABCD"]
Run Code Online (Sandbox Code Playgroud)

symbol_list,我想用相应位置的字母替换符号,normal_list我想用列表替换列表中的非符号*

  • 符号永远是 . \ |

预期产量:

new_list = ["ABCD*********EFGHIJ**",
            "**************KLMNOPQ",
            "RSTU****VWXY****ZABCD"]
Run Code Online (Sandbox Code Playgroud)

这样做的解决方案是什么?

我试图做什么

对于这两个列表,我不知何故需要访问每行中的每个项目,这看起来真的很复杂.我尝试用for循环开始这个:

for symbol_row in symbol_list:
    for symbol_item in symbol_row:
        for normal_row in normal_list:
            for normal_item in normal_row:
Run Code Online (Sandbox Code Playgroud)

这令人困惑,似乎建议最多做两次

然后我试图检查其中一个条件:

if symbol_item in (".","\\","|"): # because \ is an escape character
    symbol_row = symbol_row.replace(symbol_item, normal_item)
Run Code Online (Sandbox Code Playgroud)

然后我添加了这个新行,new_list但我的列表最终比我打印出来之前的时间长了10倍

new_list.append(symbol_row)
Run Code Online (Sandbox Code Playgroud)

Jon*_*oop 5

它可以通过线条理解和三元比较来完成:

symbol_list = ["....firstline.\\.||hi",
               "pythonisasnake..\....",
               "||||last.\\|line\\..."]

normal_list = ["ABCDfirstlineEFGHIJhi",
               "pythonisasnakeKLMNOPQ",
               "RSTUlastVWXYlineZABCD"]

print([''.join([n if not s.isalpha() else '*' for n,s in zip(nor, sym)])
                    for nor, sym in zip(normal_list, symbol_list)])
Run Code Online (Sandbox Code Playgroud)