অভ্যন্তরীণ তালিকার একটি নির্দিষ্ট সূচক দ্বারা তালিকাগুলির তালিকাটিকে কীভাবে সাজানো যায়?


233

আমার তালিকাগুলির একটি তালিকা আছে। উদাহরণ স্বরূপ,

[
[0,1,'f'],
[4,2,'t'],
[9,4,'afsd']
]

আমি যদি অভ্যন্তরীণ তালিকার স্ট্রিং ক্ষেত্রের সাহায্যে বাইরের তালিকাটি বাছাই করতে চাই, আপনি কীভাবে অজগরটি করবেন?


6
টিউটোরিয়ালের লিঙ্ক: wiki.python.org/moin/HowTo/Sorting
ফেলিক্স ক্লিং

3
দরকারী লিঙ্ক: stackoverflow.com/questions/18142090/...
dot.Py

উত্তর:


320

এটি আইটেমজিটারের কাজ job

>>> from operator import itemgetter
>>> L=[[0, 1, 'f'], [4, 2, 't'], [9, 4, 'afsd']]
>>> sorted(L, key=itemgetter(2))
[[9, 4, 'afsd'], [0, 1, 'f'], [4, 2, 't']]

এখানে ল্যাম্বডা ফাংশনটি ব্যবহার করাও সম্ভব, তবে লম্বদা ফাংশনটি এই সাধারণ ক্ষেত্রে ধীর is


আমি যদি মামলাটি উপেক্ষা করতে চাই?
bzupnick

5
@ বিজুপনিক, ব্যবহার করুন key=lambda x:x[2].casefold()। যদি আপনার পাইথনটি যথেষ্ট পরিমাণে নতুন না হয় তবে কেবল তার .lower()পরিবর্তে ব্যবহার করুন.casefold()
জন লা রুই

x = [[[5,3], 1.0345], [[5,6], 5.098], [[5,4], 4.89], [[5,1], 5.97]] এর মতো একটি তালিকা সহ আমরা x [0] [1] এর উপাদানগুলির সাথে আইটেমটার ব্যবহার করে বাছাই করি?
nidHi

আমি কি সাজানোর সূচকগুলি পেতে পারি, তাই একই ক্রমে তালিকার আরও একটি সম্পর্কিত তালিকা বাছাই করতে?
অদ্ভুত

@ ক্যুরিক এটি একটি আকর্ষণীয় প্রশ্নের মতো মনে হলেও মন্তব্যে উত্তর দেওয়া ঠিক নয়। আপনি যদি এটি জুড়ে এমন কোনও প্রশ্ন খুঁজে না পান তবে আপনার একটি তৈরি করা উচিত।
জন লা রুয়ে

175

জায়গায়

>>> l = [[0, 1, 'f'], [4, 2, 't'], [9, 4, 'afsd']]
>>> l.sort(key=lambda x: x[2])

সাজানো ব্যবহার করে জায়গায় নয়:

>>> sorted(l, key=lambda x: x[2])

4
আপনার সম্পর্কে আরো বিস্তারিত দিতে পারেন in placeএবং not in place?
কুন

9
@ কুন, "স্থানে" অর্থ হ'ল পুরানো তালিকার মেমরিটি সাজানো অনুসারে আবার ব্যবহার করা হয়েছে used "স্থানে নেই" এর অর্থ হল পুরানো তালিকাটি অপরিবর্তিত রয়েছে এবং একটি নতুন তালিকা তৈরি করা হয়েছে।
জন লা রুই

x = [[[5,3], 1.0345], [[5,6], 5.098], [[5,4], 4.89], [[5,1], 5.97]] এর মতো একটি তালিকা রয়েছে, এক্স [0] [1] এর উপাদানগুলির প্রতি আমরা কীভাবে বাছাই করতে পারি?
nidHi

81

আইটেমজিটার আপনাকে একাধিক মানদণ্ড / কলামগুলি অনুসারে বাছাই করতে দেয়:

sorted_list = sorted(list_to_sort, key=itemgetter(2,0,1))

5
আমি মনে করি এই উত্তরটি খুব গুরুত্বপূর্ণ। আমি মনে করি অভ্যন্তরীণ অ্যারে সূচকগুলি অনুসারে বাছাই করার লোকেরা এখানে পড়বে তবে বহু অভ্যন্তরীণ অ্যারে সূচী অনুসারে বাছাই করার লোকেরা এখানেই শুরু হবে এবং আপনার উত্তর আমাকে এই আইটেমটিটারটি দেখতে পাবে যে এটি আসলে আপনার জন্যই করবে!
জেকড্রয়েড

11

ল্যাম্বদা ফাংশনের মাধ্যমে একাধিক মানদণ্ডও প্রয়োগ করা যেতে পারে

sorted_list = sorted(list_to_sort, key=lambda x: (x[1], x[0]))

10
array.sort(key = lambda x:x[1])

আপনি এই স্নিপেট ব্যবহার করে সহজেই বাছাই করতে পারেন, যেখানে 1 উপাদানটির সূচক।



8

আমি মনে করি লাম্বদা ফাংশনটি আপনার সমস্যার সমাধান করতে পারে।

old_list = [[0,1,'f'], [4,2,'t'],[9,4,'afsd']]

#let's assume we want to sort lists by last value ( old_list[2] )
new_list = sorted(old_list, key=lambda x: x[2])

#Resulst of new_list will be:

[[9, 4, 'afsd'], [0, 1, 'f'], [4, 2, 't']]

2
**old_list = [[0,1,'f'], [4,2,'t'],[9,4,'afsd']]
    #let's assume we want to sort lists by last value ( old_list[2] )
    new_list = sorted(old_list, key=lambda x: x[2])**

আমি ভুল হলে আমাকে সংশোধন করুন তবে তালিকার তৃতীয় আইটেমটি তালিকায় 'x [2]' কল করছেন না, নেস্টেড তালিকার তৃতীয় আইটেমটি নয়? এটি x [2] [2] হওয়া উচিত?


না, কারণ কী / ল্যাম্বদা ইতিমধ্যে প্রথম-স্তরের তালিকার আইটেমগুলিতে পুনরাবৃত্তি করছে। x প্রতিটি আইটেমকে ঘুরিয়ে বাঁধা একটি স্থানীয় ভেরিয়েবল।
ড্রাগনলর্ড

1

আরও সহজে বুঝতে (ল্যাম্বদা আসলে কী করছে):

ls2=[[0,1,'f'],[4,2,'t'],[9,4,'afsd']]
def thirdItem(ls):
    #return the third item of the list
    return ls[2]
#Sort according to what the thirdItem function return 
ls2.sort(key=thirdItem)

0

এখানে একটি বহুমাত্রিক অ্যারে বাছাই করা হচ্ছে ute

arr=[[2,1],[1,2],[3,5],[4,5],[3,1],[5,2],[3,8],[1,9],[1,3]]



arr.sort(key=lambda x:x[0])
la=set([i[0] for i in Points])

for i in la:
    tempres=list()
    for j in arr:
        if j[0]==i:
            tempres.append(j[1])

    for j in sorted(tempres,reverse=True):
        print(i,j)
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.