繁体   English   中英

列表中子列表上的操作

[英]Operations on sub-lists in list

我有一个清单清单:

a = [[1, 2], [2, 3], [4, 3]]

如何分两步获得以下效果?:

  1. b = [[1, 2, 2, 3], [1, 2, 4, 3], [2, 3, 4, 3]]
  2. b = [[1, 2, 3], [1, 2, 4, 3]] ,表示:

    1.1。 如果在子列表b[i]中彼此相邻出现相同的值,则必须删除这些值之一。

    2.2。 如果相同的值出现在给定的子列表b[i]但彼此不相邻,则必须删除整个子列表b[i]

timegb是正确的。 一个优雅的解决方案涉及一些欺骗和欺骗。 我将尝试分解步骤。

  • 使用itertools.combinations查找输入的所有2种组合
  • 使用mapchain拼合返回的组合
  • 对于每个组合,按连续元素分组
  • 通过进行长度检查,仅保留那些满足您条件的产品。
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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM