我想检查列表是否具有特定的元素序列。我已经对包含7个元素的列表进行了排序,我现在要检查前4个是否相同,最后3个是相同的。
对于我想要实现的是True,列表将是这样的:
list = ['1','1','1','1','2','2','2']
我希望这能使我想要达到的目标更加清晰。
我想检查列表是否具有特定的元素序列。我已经对包含7个元素的列表进行了排序,我现在要检查前4个是否相同,最后3个是相同的。
对于我想要实现的是True,列表将是这样的:
list = ['1','1','1','1','2','2','2']
我希望这能使我想要达到的目标更加清晰。
您可以切片列表。采取前四个要素:
>>> L = ['1','1','1','1','2','2','2']
>>> L[:4]
['1', '1', '1', '1']
和最后三个:
>>> L[-3:]
['2', '2', '2']
一个 组 不允许重复。因此:
>>> set(L[:4])
{1}
这意味着如果此组的长度为1,则切片列表中的所有元素都相同。
把这一切放在一起:
>>> len(set(L[:4])) == 1 and len(set(L[-3:])) == 1
True
向您显示您的状况得到满足。
这应该工作,只需将每个子列表传递给函数:
def all_same(items):
return all(x == items[0] for x in items)
以上内容来自以下帖子: Python:确定列表中的所有项目是否都是同一项目
如果要检查列表是否包含一个元素的3个项目和另一个元素的4个项目,则可以使用省略排序 collections.Counter
:
content = Counter(['1', '2', '2', '1', '1', '2', '1']).most_common()
print(content) # => [('1', 4), ('2', 3)]
if len(content) == 2 and content[0][1] == 4 and content[1][1] == 3 or
len(content) == 1 and content[0][1] == 7:
pass # Your list have desired structure
根据问题的额外细节,这可以解决问题:
def check_group_equal(inputList):
ref = inputList[0]
for e in inputList[1:]:
if e != ref:
return False
return True
list = some_random_list(length=7)
# Check first group
check_group_equal(list[0:3])
# Check second group
check_group_equal(list[4:7])
如果您可以将列表转换为字符串, re
会做:
re.match(r'^(.)\1{3}(.)\2{2}$', ''.join(['1','1','1','1','2','2','2']))