हाय मैं पायथन के लिए नया हूँ और मेरे पास सूची की एक सूची है

एआर = [['एक्ट', 'एबीडी'], ['कैट', 'एक्ट'], ['टीएसी', 'एक्ट'], ['बैड', 'एक्ट'], ['सनक', 'एडीएफ' ']]

मैं एआर [इंडेक्स] [1] (इस मामले में इसका 'अधिनियम', 'अब्द', और 'एडीएफ') का उपयोग करना चाहता हूं, मेरी सूची की सूची को फिर से समूहित करने की कुंजी के रूप में ओ (एन) समय में इस तरह बनने के लिए जहां एन इनपुट सूची है:

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']]

किसी भी मदद की सराहना की जाएगी धन्यवाद

1
Sook Lim 10 अगस्त 2018, 11:09
अपेक्षित आउटपुट arr=[['act','act','act','act','cat','tac'],['abd','bad'],['adf','fad']] क्यों नहीं है? क्या इसलिए कि पहला act भी act की ओर इशारा करता है?
 – 
Nick Parsons
10 अगस्त 2018, 11:16
1
सच है, मैंने मान लिया था कि संरचना [key, value1, value2, ...] थी। पुष्टि की सराहना की जाएगी।
 – 
Mathieu
10 अगस्त 2018, 11:18
हाँ यह कुंजी, मूल्य, मूल्य आदि होना चाहिए, लेकिन किसी तरह यह ठीक से नहीं जुड़ रहा है?
 – 
Sook Lim
10 अगस्त 2018, 11:22
आपका कोड गन्दा दिखता है और अधूरा है। tempList परिभाषित भी नहीं है। तो हाँ, आपने शायद कहीं गड़बड़ कर दी है, लेकिन यह बताना कठिन है कि कहाँ। आपको नीचे 2 बेहतर समाधान मिले हैं। उन्हें समझने की कोशिश करें। दोनों ओ (एन²) में हैं।
 – 
Mathieu
10 अगस्त 2018, 11:26

2 जवाब

आप अपनी सूचियों की सूची से सूचियों को समूहबद्ध करने के लिए itertools.groupby का उपयोग कर सकते हैं

>>> from itertools import groupby
>>> f = lambda l: l[-1]
>>> [[k]+[l[0] for l in v] for k,v in groupby(sorted(arr, key=f), f)]
[['abd', 'bad'], ['act', 'act', 'cat', 'tac'], ['adf', 'fad']]
1
Sunitha 10 अगस्त 2018, 11:22

आपके कोड से सरल, मेरे पास यह है:

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) नहीं है। यह ओ (एन²) है।

एनबी: मुझे संदेह है कि यह ओ (एन) में किया जा सकता है क्योंकि आपको इनपुट पर लूप के लिए लूप की आवश्यकता होती है, और प्रत्येक तत्व के लिए, आपको यह देखने की ज़रूरत है कि इसे एक नई सबलिस्ट में या मौजूदा में रखा जाना चाहिए या नहीं।

1
Mathieu 10 अगस्त 2018, 11:22