【问题标题】:Loop through list to extract specific patterns循环列表以提取特定模式
【发布时间】:2022-01-09 01:17:54
【问题描述】:

我有一个非常具体的问题,我不确定如何继续。

我有一个数字列表,我想从中提取一些特定的模式,我循环遍历列表并创建一个新的,用一个例子来解释更容易。

假设我有一个列表,a = [2, 9, 3, 2, 3, 5, 7, 9]。

我想要对这个列表做的是一次循环 4 个数字,并根据它们在序列中出现的时间给它们对应的字母。

即前四个数字 = 2932 = ABCA

第二个数字序列 = 9323 = ABCB

第三序列 = 3235 = ABAC

第四个序列 = 2357 = ABCD

第五序列 = 3579 = ABCD

然后我想将这些序列添加到另一个列表中,现在看起来像,

b = [ABCA、ABCB、ABAC、ABCD、ABCD]

我真的不确定代码的格式应该如何,新列表的长度总是比原来的少 3。任何帮助都会很棒,谢谢。

【问题讨论】:

标签: python python-3.x list for-loop


【解决方案1】:

您可以使用字典将字母分配给数字,然后再次阅读该字典以访问相关字母。它有 2 个循环,虽然不理想,但可以完成工作:

a = [2, 9, 3, 2, 3, 5, 7, 9]
len_a = len(a)
output = []
letters = 'ABCD'
for i in range(len_a-3):
    d = {}
    k = 0
    for j in a[i:i+4]:
        if j not in d:
            d[j] = letters[k]
            k += 1
        else:
            continue
    letter_assignment = ''.join([d[j] for j in a[i:i+4]])
    output.append(letter_assignment)
    

输出:

print(output)
# ['ABCA', 'ABCB', 'ABAC', 'ABCD', 'ABCD']

【讨论】:

    【解决方案2】:

    我建议使用 zip 函数将数字与字母对应起来,而对于循环,使用“for”函数。

    【讨论】:

    • 正如目前所写,您的答案尚不清楚。请edit 添加其他详细信息,以帮助其他人了解这如何解决所提出的问题。你可以找到更多关于如何写好答案的信息in the help center
    猜你喜欢
    • 2021-01-16
    • 1970-01-01
    • 2017-11-12
    • 2018-10-10
    • 1970-01-01
    • 2018-09-06
    • 1970-01-01
    相关资源
    最近更新 更多