检查集合中的某些值是否满足 Python 中的特定条件

Checking if some values in a set meet a specific condition in Python

在 Python 程序中,我有一个元组列表列表:

x = [[(frozenset({(5, 'Y')}), 5, 'Y')],
     [(frozenset({(9, 'Y'), (2, 'Y'), (7, 'N'), (3, 'Y')}), 2, 'Y'),
      (frozenset({(4, 'Y'), (0, 'Y'), (8, 'N'), (1, 'Y')}), 4, 'Y'),
      (frozenset({(9, 'Y'), (2, 'Y'), (7, 'N'), (3, 'Y')}), 3, 'Y')],
     [(frozenset({(9, 'Y'), (2, 'Y'), (7, 'N'), (3, 'Y')}), 7, 'N'),
      (frozenset({(4, 'Y'), (0, 'Y'), (8, 'N'), (1, 'Y')}), 8, 'N')]]

它有 3 个主要组成部分:

x[0] = [[(frozenset({(5, 'Y')}), 5, 'Y')]
x[1] = [(frozenset({(9, 'Y'), (2, 'Y'), (7, 'N'), (3, 'Y')}), 2, 'Y'), (frozenset({(4, 'Y'), (0, 'Y'), (8, 'N'), (1, 'Y')}), 4, 'Y'), (frozenset({(9, 'Y'), (2, 'Y'), (7, 'N'), (3, 'Y')}), 3, 'Y')];
x[2] = [(frozenset({(9, 'Y'), (2, 'Y'), (7, 'N'), (3, 'Y')}), 7, 'N'), (frozenset({(4, 'Y'), (0, 'Y'), (8, 'N'), (1, 'Y')}), 8, 'N')]].

它们有不同的尺寸。我想检查 3 个列表的所有最后一个组件是否满足特定条件:'Y' 如果它们都是 'Y'; 'N' 如果都是'N';或 'U' 如果存在一些 'Y' 和一些 'N' 在每个组件中。在此示例中,结果应类似于:['Y', 'Y', 'N'].

我该如何解决这个问题?

您想将一个函数应用于列表的每个元素 x,并且 return 一个结果列表。

这可以通过列表理解或 map:

来完成
def f(e):
  return 2*e

x = [1,2,3]

print([f(e) for e in x])
# [2, 4, 6]

print(list(map(f, x)))
# [2, 4, 6]

您现在要做的就是为您的问题编写此函数 f:这里 e 是一个三元组列表,f 应该检查是否所有第三个元素三胞胎是 'Y' 或 'N'.

您可以使用allany来检查是否所有元素或集合中的所有元素都满足条件:

collection = [2, 4, 6, 9]
print(all(n % 2 == 0 for n in collection))
# False

collection = [2, 4, 6, 8]
print(all(n % 2 == 0 for n in collection))
# True

现在,x 的每个子列表 e 中的元素都是三元组(具有 3 个元素的元组)。三元组的第一个元素是冻结集,我们不关心它。三元组的第二个元素是一个数字,我们不关心它。三元组的第三个元素是 'Y' 或 'N',这些是我们感兴趣的。

def f(e):
  all_y = all(letter=='Y' for frozen,number,letter in e)
  all_n = all(letter=='N' for frozen,number,letter in e)
  lil_bit_o_both = (not all_y) and (not all_n)
  return 'Y' if all_y else ('N' if all_n else 'U')

x = [[(frozenset({(5, 'Y')}), 5, 'Y')],
     [(frozenset({(9, 'Y'), (2, 'Y'), (7, 'N'), (3, 'Y')}), 2, 'Y'),
      (frozenset({(4, 'Y'), (0, 'Y'), (8, 'N'), (1, 'Y')}), 4, 'Y'),
      (frozenset({(9, 'Y'), (2, 'Y'), (7, 'N'), (3, 'Y')}), 3, 'Y')],
     [(frozenset({(9, 'Y'), (2, 'Y'), (7, 'N'), (3, 'Y')}), 7, 'N'),
      (frozenset({(4, 'Y'), (0, 'Y'), (8, 'N'), (1, 'Y')}), 8, 'N')]]

result = list(map(f, x))
print(result)
# ['Y', 'Y', 'N']