【问题标题】:Compare 2 List without pattern matching required [closed]比较不需要模式匹配的2个列表[关闭]
【发布时间】:2020-10-27 17:42:18
【问题描述】:

正如问题所述,现在我想比较 2 个没有模式匹配的变量列表

第一个列表变量 = userList[i]

第二个列表变量 = colors_code[i]

例如,

userList[i] 将包含 'Y','B','G','R'

colors_code[i] 将包含 'R','G','B','Y'

我希望我的代码比较这 2 个 List 变量是否存在,而不是模式匹配

以下是我的代码:

        # Create a For-Loop to loop 4 times, since we have only 4 colors
        for i in range(0, 4):

            # To validate User Input & overwrite User Input into the List
            if userList[i] == colors_code[i]:
                count = count + 1

                userList[i] = "1"
                correct[i] = userList[i]

            else:
                continue

【问题讨论】:

  • 你能澄清你的问题吗?请参阅How to Askhelp center
  • 请不要通过破坏您的帖子为他人增加工作量。通过在 Stack Exchange 网络上发帖,您已在 CC BY-SA 4.0 license 下授予 Stack Exchange 分发该内容的不可撤销的权利(即无论您未来的选择如何)。根据 Stack Exchange 政策,帖子的非破坏版本是分发的版本。因此,任何破坏行为都将被撤销。如果您想了解更多关于删除帖子的信息,请参阅:How does deleting work?

标签: python python-3.x list for-loop


【解决方案1】:

如果出现次数很重要

sorted(['Y','B','G','R']) == sorted(['R','G','B','Y'])

否则

set(['Y','B','G','R']) == set(['R','G','B','Y'])

【讨论】:

  • 我尝试过使用 set(['Y','B','G','R']) == set(['R','G','B',' Y']) 在我的代码中,这将是 set([userList[i]]) == sorted([colors_code[i]]) 我注意到如果两个集合没有相同的匹配,结果将消失从输出。有什么解决办法吗?
  • sorted([colors_code[i]]) 未设置。所以你在比较苹果和橘子。另一方面,sorted 对给定的可迭代对象(比如说一个集合)进行排序。所以sorted([colors_code[i]]) 没有意义。
【解决方案2】:

您有不止一种方法可以确保列表的所有元素都包含在另一个列表中:

# Classic way:

flag = True
for e in list1:
    if e not in list2:
        flag  = False
        break

if flag:
    # whatever


# Using all function:
all(map(lambda e: e in list2, list1))

# Using frozen sets
FrozenSet(list1) == FrozenSet (list2)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-12-29
    • 1970-01-01
    相关资源
    最近更新 更多