簡體   English   中英

每個索引的排序列表中的最大行序列

[英]max row sequence from sorted list for each index

我已經按索引(a,b,c)存儲了輸入,然后按升序(按基本順序)存儲了輸入,如下所示:

input=['3a', '4a', '5a', '6a', 'Ca', 'Da', '4b','5b', '6b', '7b', '7c', '8c']

我的基礎上按升序排列的數字順序是:

"123456789ABCD"

現在我要做的是為每個索引(a,b,c)選擇行長大於4的項目並將其添加到輸出列表中(即找到每個索引(a,b, c),實際上我需要每個索引的所有大於4的行組合,但是我有一個想法,如果我找到每個索引的最大LEN行序列(a,b,c),該如何組合

因此,對於上面的輸入,期望以下輸出:

[['3a','4a','5a','6a'],['4b','5b','6b','7b']]

這是我嘗試使用的代碼,代碼在python中:

input=['3a','4a','5a','6a','Ca','Da','4b','5b','6b','7b','7c','8c']
digits = '123456789ABCD'
digit_map = {d:i for i, d in enumerate(digits)}
matches=[]
temp=[]
prev = 789
print hands
for n in input:
    if digit_map[n[0]] == prev + 1:
        matches.append(n)
        print matches
    else:
        if len(matches) >= 4:
            temp.append(matches)
            print temp 
        matches = [n]
        print matches
    prev = digit_map[n[0]]
print temp

像插入一個額外的循環? (這可以進一步優化)

input=['3a','4a','5a','6a','Ca','Da','4b','5b','6b','7b','7c','8c']
digits = '123456789ABCD'
digit_map = {d:i for i, d in enumerate(digits)}
print hands
temp = []
for letter in ['a','b','c']:
    prev = 789
    matches=[]
    filtered = [i for i in input if i[1]==letter]
    for n in filtered:
        if digit_map[n[0]] == prev + 1:
            matches.append(n)
            print matches
        else:
            if len(matches) >= 4:
                temp.append(matches)
                print temp 
            matches = [n]
            print matches
        prev = digit_map[n[0]]
    print temp    
print temp 
lst=['3a', '4a', '5a', '6a', 'Ca', 'Da', '4b','5b', '6b', '7b', '7c', '8c']
prev = lst[0][-1]
streak = 1
streaklst = [lst[0]]
matches = []
for x in lst[1:]:
    if x[-1] == prev and streak < 4:
        streak += 1
        streaklst.append(x)
    else:
        if streak == 4:
            matches.append(streaklst)
        streaklst = [x]
        streak = 1
        prev = x[-1]

print(matches)

將打印

[['3a', '4a', '5a', '6a'], ['4b', '5b', '6b', '7b']] 

注意:

lst=['3a', '4a', '5a', '6a', 'Ca', 'Da', 'Aa', 'Ba', '4b','5b', '6b', '7b', '7c', '8c']

它將打印

[['3a', '4a', '5a', '6a'], ['Ca', 'Da', 'Aa', 'Ba'], ['4b', '5b', '6b', '7b']]

也就是說,它將找到所有4個條紋。您需要告訴我們是否要這樣做,因為您的問題是想要整個條紋,還是將長度減少為4的條紋,還是要將長度為4的所有條紋(或更高)。 至少對我來說,您的示例輸出和您要編寫的內容有所不同。

要找到超過四個的條紋並將其存儲,您可以執行以下操作:

lst=['3a', '4a', '5a', '6a', 'Ca', 'Da', 'Aa', 'Ba', '4b','5b', '6b', '7b', '7c', '8c']
prev = lst[0][-1]
streak = 1
streaklst = [lst[0]]
matches = []
for x in lst[1:]:
    if x[-1] == prev:
        streak += 1
        streaklst.append(x)
    else:
        if streak >= 4:
            matches.append(streaklst)
        streaklst = [x]
        streak = 1
        prev = x[-1]

print(matches)

哪個會打印

[['3a', '4a', '5a', '6a', 'Ca', 'Da', 'Aa', 'Ba'], ['4b', '5b', '6b', '7b']] 

len(matches)現在將為您提供條紋數量> = 4。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM