【问题标题】:Create all possible subsequence with unique elements使用唯一元素创建所有可能的子序列
【发布时间】:2015-04-06 22:27:48
【问题描述】:

我有一个表单元素序列:

A111 T112 I113 A114 S115 I116 D117 F118 K119 R120 E121 T122 C123 V124 V125 V126 T112

约束每个元素只出现一次。在上述序列中,T112 出现两次。所以我需要创建所有可能满足约束的子序列,即:

T112 I113 A114 S115 I116

I116 K119 R120 E121 T122 C123 V124 V125 V126 T112

在更复杂的场景中,我有以下必须满足相同约束的序列:

A111 T112 I113 A114 T112 S115 I116 D117 I116 K119 R120 E121 T122 C123 V124 V125 V126 p>

这一次 T112 也是 I116 出现两次。在这种情况下,我需要以下子序列:

A111 T112 I113 A114

I113 A114 T112 S115 I116 D117

D117 I116 K119 R120 E121 T122 C123 V124 V125 V126

当然,一个元素可能出现超过 2 次。有没有不使用遗传算法的有效方法来解决这个问题?

【问题讨论】:

  • 您需要提供更多的样本输入和输出。我仍然不确定究竟你想要什么。
  • 我想我可以看到子序列应该是什么,但你能说得更清楚吗?实际的规则是什么?
  • 每个序列的分隔符是什么?

标签: python algorithm sequence


【解决方案1】:

代码:

list  = ["A111", "T112", "I113", "A114", "T112", "S115", "I116", "D117", "I116", "K119", "R120", "E121", "T122", "C123", "V124", "V125", "V126"]

subsequence = []
for item in list:
    if item in subsequence:
        print subsequence
        index = subsequence.index(item)+1
        subsequence = subsequence[index:]
    subsequence.append(item)
print subsequence

将打印:

['A111', 'T112', 'I113', 'A114']
['I113', 'A114', 'T112', 'S115', 'I116', 'D117']
['D117', 'I116', 'K119', 'R120', 'E121', 'T122', 'C123', 'V124', 'V125', 'V126']

【讨论】:

  • 聪明!它也适用于更复杂的情况,如下所示:list = [“A111”,“T112”,“I113”,“A114”,“X100”,“I116”,“X101”,“T112”,“S115”, “I116”、“D117”、“I116”、“K119”、“R120”、“E121”、“T122”、“C123”、“V124”、“V125”、“V126”]
【解决方案2】:

您可以维护一个运行集,以跟踪重复的字符串:

def partitions(s):

    lst = s.split()
    flags = set()
    for l in lst:
        if l in flags:
            yield list(flags)
            flags.clear()
        flags.add(l)
    yield list(flags)

>>> s = "A111 T112 I113 A114 T112 S115 I116 D117 I116 K119 R120 E121 T122 C123 V124 V125 V126"
>>> x = partitions(s)
>>> print list(x)
[['A111', 'I113', 'T112', 'A114'], ['D117', 'S115', 'T112', 'I116'], ['R120', 'T122', 'E121', 'V125', 'V124', 'V126', 'C123', 'K119', 'I116']]

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-05-15
    • 1970-01-01
    • 2012-10-18
    • 2020-07-25
    • 2020-05-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多