[英]Operations on sub-lists in list
我有一个清单清单:
a = [[1, 2], [2, 3], [4, 3]]
如何分两步获得以下效果?:
b = [[1, 2, 2, 3], [1, 2, 4, 3], [2, 3, 4, 3]]
b = [[1, 2, 3], [1, 2, 4, 3]]
,表示:
1.1。 如果在子列表b[i]
中彼此相邻出现相同的值,则必须删除这些值之一。
2.2。 如果相同的值出现在给定的子列表b[i]
但彼此不相邻,则必须删除整个子列表b[i]
。
timegb是正确的。 一个优雅的解决方案涉及一些欺骗和欺骗。 我将尝试分解步骤。
itertools.combinations
查找输入的所有2种组合 map
和chain
拼合返回的组合 from itertools import chain, combinations, groupby
out = []
for r in map(lambda x: list(chain.from_iterable(x)), combinations(a, 2)):
j = [i for i, _ in groupby(r)]
if len(j) <= len(set(r)):
out.append(j)
print(out)
[[1, 2, 3], [1, 2, 4, 3]]
如果只需要第一部分,则找到组合并展平:
out = list(map(lambda x: list(chain.from_iterable(x)), combinations(a, 2)))
print(out)
[[1, 2, 2, 3], [1, 2, 4, 3], [2, 3, 4, 3]]
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.