如何基于线性时间中的键对列表列表进行重新分组?

时间:2018-08-10 08:09:28

标签: python list loops anagram

嗨,我是Python的新手,我有一个列表列表

arr = [['act','abd'],['cat','act'],['tac','act'],['bad','act'],['fad' ,'adf']]

我想使用arr [index] [1](在本例中为'act','abd'和'adf')作为重新组合列表以使其在O(N)中变为这样的键N是输入列表的时间:

arr=[['act','act','cat','tac'],['abd','bad'],['adf','fad']]

这是我尝试过的,但是输出没有意义:

def groupList(a_list):
index=0
searchList=[]
while index<len(tempList)-1:
    key=tempList[index][1]
    newList=[]
    newList.append(key)
    newList.append(tempList[index][0])
    if tempList[index+1][1]==key:
        newList.append(tempList[index+1][0])
    else:
        searchList.append(newList)
    index+=1
print(searchList)

输出为:

[['abd', 'act'], ['act', 'bad']]

任何帮助将不胜感激

2 个答案:

答案 0 :(得分:1)

比您的代码简单,我有一个:

arr= [['act', 'act'], ['cat', 'act'], ['tac', 'act'], ['bad', 'abd'],['fad', 'adf']] 

new_arr = []
keys = []

for elt in arr:
    if elt[1] not in keys:
        # apparently you want the key first
        new_arr.append([elt[1], elt[0]])
        keys.append(elt[1])
    else:
        id = keys.index(elt[1])
        new_arr[id].append(elt[0])

它只是在寻找是否已经遇到了密钥,是否正在寻找放置新元素的位置。

输出:

new_arr
Out: [['act', 'act', 'cat', 'tac'], ['abd', 'bad'], ['adf', 'fad']]

但是,由于.index()方法和in的原因,这不是O(n)。是O(n²)。

NB:我怀疑是否可以在O(n)中完成此操作,因为您需要一个for循环才能在输入上循环,对于每个元素,您需要查看是否需要将其放置在新的子列表中或现有的。

答案 1 :(得分:1)

您可以使用recycler.requestDisallowInterceptTouchEvent(true)对列表列表中的列表进行分组

RecyclerView