检测以与另一个列表相同的项开头的列表。

huangapple go评论78阅读模式
英文:

Detect lists that start with same items as in another list

问题

给定一个 template_list,如何判断 test_list 是否以存在于 template_list 中的子列表开头呢?

例如,当 template_list 为:

template_list = [['item 1'], ['item 2','item 3']]

test_list = ['item 1'] 时,以下代码将返回 True

print(any([x[:len(test_list)] == test_list for x in template_list]))

test_list = ['item 2', 'item 3'] 时,以下代码也将返回 True

print(any([x[:len(test_list)] == test_list for x in template_list]))

但是,如果 test_list 包含更多项目,如下所示:

test_list = ['item 1', 'irrelevant item 1', 'irrelevant item 2', 'irrelevant item 3']
print(any([x[:len(test_list)] == test_list for x in template_list]))  # 返回 False

或者:

test_list = ['item 2', 'item 3', 'irrelevant item 1', 'irrelevant item 2']
print(any([x[:len(test_list)] == test_list for x in template_list]))  # 返回 False

您希望即使 test_list 包含更多项目,只要它们与 template_list 中的子列表开头相同,也返回 True

您可以使用以下代码来实现这一目标:

print(any([test_list[:len(x)] == x for x in template_list]))

这将检查 test_list 是否以 template_list 中的任何子列表开头,即使 test_list 包含更多项目也会返回 True

英文:

Given a template_list

template_list = [['item 1'], ['item 2','item 3']]

and a test_list, how can we identify if test_list starts with items that exist as sublist in the template_list?

For example:

template_list = [['item 1'], ['item 2','item 3']]
test_list = ['item 1']
print(any([x[:len(test_list)] == test_list for x in template_list]))

returns True, as expected

test_list = ['item 2', 'item 3']
print(any([x[:len(test_list)] == test_list for x in template_list]))

returns True, as expected

but I want the following 2 cases to return True too:

test_list = ['item 1', 'irrelevant item 1', 'irrelevant item 2', 'irrelevant item 3']
print(any([x[:len(test_list)] == test_list for x in template_list])) # returns False
test_list = ['item 2', 'item 3', 'irrelevant item 1', 'irrelevant item 2']
print(any([x[:len(test_list)] == test_list for x in template_list])) # returns False

So, what I expect is when test_list starts with exactly the same items as one of the sublists in template_list, even if there are more items in the test_list, to return True.

How can I achieve that? Thank you in advance for any help!

答案1

得分: 1

将您的逻辑更改如下(用于检查template_list的任何条目是否是test_list的起始部分):

any(x == test_list[:len(x)] for x in template_list)
英文:

Change your logic to the following (to check if any entry of template_list is a starting part of test_list):

any(x == test_list[:len(x)] for x in template_list)

huangapple
  • 本文由 发表于 2023年4月10日 20:40:32
  • 转载请务必保留本文链接:https://go.coder-hub.com/75977201.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定