嗨,我是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']]
任何帮助将不胜感激
答案 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