检查集合中的某些值是否满足 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'.
您可以使用all
和any
来检查是否所有元素或集合中的所有元素都满足条件:
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']
在 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'.
您可以使用all
和any
来检查是否所有元素或集合中的所有元素都满足条件:
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']