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

2024-06-16 08:29:12 发布

您现在位置:Python中文网/ 问答频道 /正文

我特别想做的事

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

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

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

  • 符号将始终是.\|

预期产出:

^{pr2}$

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

我想做的事

对于这两个列表,我都需要访问每一行中的每一项,这似乎非常复杂。我试着从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:

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

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

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

然后我将这一新行添加到new_list中,但我的列表在打印出来后比之前长了10倍

new_list.append(symbol_row)

Tags: in列表newforline符号hisymbol
3条回答

可以通过行理解和三元比较来完成:

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)])

你需要什么代码。在

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

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

letters = "AaBbCcDdEeFfGgHhIiJjKkLlMmNnOoPpQqRrSsTtUuVvWwXxYyZz"

new_list = []

for i in range(len(symbol_list)):
    new_list.append("")
    for index in range(len(symbol_list[i])):
        if letters.find(symbol_list[i][index]) != -1:
            new_list[i] += "*"
        else:
            new_list[i] += normal_list[i][index]

print(new_list)
input()

它在symbol_列表中查找字母的所有实例,并在新列表中放置一个星号

我们可以这样写:

my_symbols = {'\\', '|', '.'}

[
  ''.join(('*', cb)[ca in my_symbols] for ca, cb in zip(linea, lineb))
  for linea, lineb in zip(symbol_list, normal_list)
]

因此,我们首先定义一组符号(以便于扩展)。接下来,我们同时迭代symbol_list和{}的行。对于每一行,我们迭代两行,并使用ca(该symbol_list行的字符)作为选择器来决定我们是为该特定字符填充'*'还是{}。在

示例输入的输出是:

^{pr2}$

在示例输入中,最后一行有点“未对齐”,因为它包含:

||||last.\|line\...
RSTUlastVWXYlineZABCD

最后一行包含:

^{4}$

相关问题 更多 >