Python - 检查元素是否在 1 个或多个嵌套列表中,如果为 TRUE,则 return 整个列表
Python - Check if element is in 1 or more nested lists and return whole list if TRUE
在此先感谢您的帮助。
我有一个嵌套的 list/list 列表,我需要 return 仅当列表包含特定元素时才将每个列表显示到屏幕上。
榜单特征:
- 每个列表有相同数量的元素,
- 每个元素代表相同的东西
- 在下面的例子中
index 0 = fruit name, index 1 = amount, index 2 = colour
.
- 示例:
lists = [banana, 10, yellow], [apple, 12, red], [pear, 60, green], [mango, 5, yellow]
我尝试过条件 for 循环和为每个变体创建一个新列表的想法,但这似乎是一个难以管理的解决方案。
有人能帮忙吗?
搜索 1:
如果 'banana' 在一个或多个嵌套列表中
然后打印每个嵌套列表
预期输出:
[香蕉,10,黄色]
搜索 2:
如果 'yellow' 在一个或多个嵌套列表中
然后打印每个嵌套列表
预期输出:
[香蕉,10,黄色]
[芒果,5,黄色]
这是一个粗略的方法:
lists = [
["banana", 10, "yellow"],
["apple", 12, "red"],
["pear", 60, "green"],
["mango", 5, "yellow"],
]
keyword = 'banana'
for lst in lists:
if keyword in lst:
print(lst)
keyword = 'yellow'
for lst in lists:
if keyword in lst:
print(lst)
理想情况下,您会将搜索提取到接受列表和关键字的函数:
def get_sublists_containing_keyword(lists, keyword):
sublists = []
for lst in lists:
if keyword in lst:
sublists.append(lst)
return sublists
lists = [
["banana", 10, "yellow"],
["apple", 12, "red"],
["pear", 60, "green"],
["mango", 5, "yellow"],
]
banana_lists = get_sublists_containing_keyword(lists, 'banana')
yellow_lists = get_sublists_containing_keyword(lists, 'yellow')
for banana_list in banana_lists:
print(banana_list)
for yellow_list in yellow_lists:
print(yellow_list)
您可以在打印时使用str.<b>join(<i>iterable</i>)</b>
inside a f-string
去除字符串元素周围的单引号字符:
def print_lists_that_contain_search_term(lists: list[list[str | int]],
search_term: str) -> None:
print(f'{search_term = }')
print(' '.join(f'[{", ".join(map(str, lst))}]' for lst in lists if search_term in lst))
def main() -> None:
lists = [['banana', 10, 'yellow'], ['apple', 12, 'red'], ['pear', 60, 'green'], ['mango', 5, 'yellow']]
print_lists_that_contain_search_term(lists, 'banana')
print_lists_that_contain_search_term(lists, 'yellow')
if __name__ == '__main__':
main()
输出:
search_term = 'banana'
[banana, 10, yellow]
search_term = 'yellow'
[banana, 10, yellow] [mango, 5, yellow]
这里有一个单行解决方案。
def search(lists, item):
return list(filter(None, map(lambda x: x if item in x else [], lists)))
现在您可以调用该函数并检查它了。
In [12]: lists
Out[12]:
[['banana', 10, 'yellow'],
['apple', 12, 'red'],
['pear', 60, 'green'],
['mango', 5, 'yellow']]
In [13]: search(lists, 'banana')
Out[13]: [['banana', 10, 'yellow']]
In [14]: search(lists, 'yellow')
Out[14]: [['banana', 10, 'yellow'], ['mango', 5, 'yellow']]
代码解释
这里我使用了 lambda 表达式并检查了要搜索的项目是否在列表中然后 return 该列表否则 return 一个空列表。并通过过滤器功能删除了所有空列表。
在此先感谢您的帮助。
我有一个嵌套的 list/list 列表,我需要 return 仅当列表包含特定元素时才将每个列表显示到屏幕上。
榜单特征:
- 每个列表有相同数量的元素,
- 每个元素代表相同的东西
- 在下面的例子中
index 0 = fruit name, index 1 = amount, index 2 = colour
. - 示例:
lists = [banana, 10, yellow], [apple, 12, red], [pear, 60, green], [mango, 5, yellow]
我尝试过条件 for 循环和为每个变体创建一个新列表的想法,但这似乎是一个难以管理的解决方案。
有人能帮忙吗?
搜索 1: 如果 'banana' 在一个或多个嵌套列表中 然后打印每个嵌套列表
预期输出: [香蕉,10,黄色]
搜索 2: 如果 'yellow' 在一个或多个嵌套列表中 然后打印每个嵌套列表
预期输出: [香蕉,10,黄色] [芒果,5,黄色]
这是一个粗略的方法:
lists = [
["banana", 10, "yellow"],
["apple", 12, "red"],
["pear", 60, "green"],
["mango", 5, "yellow"],
]
keyword = 'banana'
for lst in lists:
if keyword in lst:
print(lst)
keyword = 'yellow'
for lst in lists:
if keyword in lst:
print(lst)
理想情况下,您会将搜索提取到接受列表和关键字的函数:
def get_sublists_containing_keyword(lists, keyword):
sublists = []
for lst in lists:
if keyword in lst:
sublists.append(lst)
return sublists
lists = [
["banana", 10, "yellow"],
["apple", 12, "red"],
["pear", 60, "green"],
["mango", 5, "yellow"],
]
banana_lists = get_sublists_containing_keyword(lists, 'banana')
yellow_lists = get_sublists_containing_keyword(lists, 'yellow')
for banana_list in banana_lists:
print(banana_list)
for yellow_list in yellow_lists:
print(yellow_list)
您可以在打印时使用str.<b>join(<i>iterable</i>)</b>
inside a f-string
去除字符串元素周围的单引号字符:
def print_lists_that_contain_search_term(lists: list[list[str | int]],
search_term: str) -> None:
print(f'{search_term = }')
print(' '.join(f'[{", ".join(map(str, lst))}]' for lst in lists if search_term in lst))
def main() -> None:
lists = [['banana', 10, 'yellow'], ['apple', 12, 'red'], ['pear', 60, 'green'], ['mango', 5, 'yellow']]
print_lists_that_contain_search_term(lists, 'banana')
print_lists_that_contain_search_term(lists, 'yellow')
if __name__ == '__main__':
main()
输出:
search_term = 'banana'
[banana, 10, yellow]
search_term = 'yellow'
[banana, 10, yellow] [mango, 5, yellow]
这里有一个单行解决方案。
def search(lists, item):
return list(filter(None, map(lambda x: x if item in x else [], lists)))
现在您可以调用该函数并检查它了。
In [12]: lists
Out[12]:
[['banana', 10, 'yellow'],
['apple', 12, 'red'],
['pear', 60, 'green'],
['mango', 5, 'yellow']]
In [13]: search(lists, 'banana')
Out[13]: [['banana', 10, 'yellow']]
In [14]: search(lists, 'yellow')
Out[14]: [['banana', 10, 'yellow'], ['mango', 5, 'yellow']]
代码解释
这里我使用了 lambda 表达式并检查了要搜索的项目是否在列表中然后 return 该列表否则 return 一个空列表。并通过过滤器功能删除了所有空列表。