পাইথন তালিকায় দুটি আইটেমের অবস্থান কীভাবে পরিবর্তন করা যায়?


208

আমি নেটটিতে এই সমস্যার জন্য একটি ভাল সমাধান খুঁজে পাচ্ছি না (সম্ভবত কারণ স্যুইচ, অবস্থান, তালিকা এবং পাইথন এই জাতীয় সমস্ত ওভারলোডেড শব্দ)।

এটি বরং সহজ - আমার এই তালিকাটি রয়েছে:

['title', 'email', 'password2', 'password1', 'first_name', 'last_name', 'next', 'newsletter']

আমি অবস্থানের স্যুইচ করতে চাই 'password2'এবং 'password1'- তাদের সঠিক অবস্থানটি না জেনে, কেবল তারা একে অপরের ঠিক পাশেই এবং password2প্রথম।

আমি কিছু বরং দীর্ঘায়িত তালিকা-সাবস্ক্রিপশন দিয়ে এটি সম্পাদন করেছি, তবে আমি কি আরও একটু মার্জিত কিছু নিয়ে আসা সম্ভব ভাবছিলাম?


আপনার সমস্যাটি কি তালিকায় 'পাসওয়ার্ড 2' সন্ধানের দক্ষতা? 'পাসওয়ার্ড 1' 'পাসওয়ার্ড 2' এর আগে আসতে পারে? এখানে কি কিছু জটিলতা রয়েছে যা আপনার আসল প্রশ্নে আসে না? অন্যথায় আমি @ অ্যানবাইন্ডের সাথে একমত
ব্রেন্ট লিখেছেন

3
আপনি যা পেয়েছেন তা আপনার পোস্ট করা উচিত - আপনি "বরং দীর্ঘ-বাতাসের তালিকা-সাবস্ক্রিপশন" দ্বারা যা বোঝাচ্ছেন সে সম্পর্কে আমি আগ্রহী।
সমত্রেগর

সূচি 1 = সূচকের লাইন বরাবর কিছু ('পাসওয়ার্ড 1'); সূচক 2 = সূচক ('পাসওয়ার্ড 2'); অর্ডার = অর্ডার [: সূচি 2]। অ্যাপেন্ড (অর্ডার [সূচি 1])। সংযোজন (আদেশ [সূচক 2])। সংযোজন (আদেশ [সূচক 1 + 1:]); আরও কয়েকটি লাইনে ছড়িয়ে দিন। বেশ, না।
মিক্ল

উত্তর:


392
    i = ['title', 'email', 'password2', 'password1', 'first_name', 
         'last_name', 'next', 'newsletter']
    a, b = i.index('password2'), i.index('password1')
    i[b], i[a] = i[a], i[b]

165

সাধারণ পাইথন অদলবদলের মতো দেখতে:

foo[i], foo[j] = foo[j], foo[i]

এখন আপনাকে যা করতে হবে তা iহ'ল কী তা চিহ্নিত করা এবং এটি সহজেই সম্পন্ন করা যেতে পারে index:

i = foo.index("password2")

15

আপনার চশমা দেওয়া, আমি স্লাইস-অ্যাসাইনমেন্ট ব্যবহার করব:

>>> L = ['title', 'email', 'password2', 'password1', 'first_name', 'last_name', 'next', 'newsletter']
>>> i = L.index('password2')
>>> L[i:i+2] = L[i+1:i-1:-1]
>>> L
['title', 'email', 'password1', 'password2', 'first_name', 'last_name', 'next', 'newsletter']

স্লাইস অ্যাসাইনমেন্টের ডান হাতটি একটি "বিপরীত স্লাইস" এবং এটি বানানও হতে পারে:

L[i:i+2] = reversed(L[i:i+2])

আপনি যদি আরও পড়তে পেলেন তবে অনেকেই পাবেন।


আপনি শিরোনাম এবং মেলটি স্যুইচ করতে চান তবে এটি কেন কাজ করছে না, প্রথমটির সাথে দ্বিতীয়টি?
লুইজি তিবুরজি

দুঃখিত আমি এখন বুঝতে পেরেছি, আই -১ এ কোনও উপাদান নেই তাই খালি তালিকাটি ফিরে
আসল

7

এর চেয়ে বেশি সময় আর কীভাবে হতে পারে

tmp = my_list[indexOfPwd2]
my_list[indexOfPwd2] = my_list[indexOfPwd2 + 1]
my_list[indexOfPwd2 + 1] = tmp

অস্থায়ী সঞ্চয়স্থান ব্যবহার করে এটি কেবল একটি সরল অদলবদল।


13
আপনি যদি এটি সম্পর্কে সত্যই "পাইথোনিক" হতে চান, আপনি সর্বদা এটিও করতে পারেন:my_list[indexOfPwd2],my_list[indexOfPwd2+1] = my_list[indexOfPwd2+1],my_list[indexOfPwd2]
ব্রেন্ট লিখেছেন কোড

0
for i in range(len(arr)):
    if l[-1] > l[i]:
        l[-1], l[i] = l[i], l[-1]
        break

এর ফলস্বরূপ যদি শেষ উপাদানটি অবস্থানের উপাদানের চেয়ে বেশি হয় iতবে তারা উভয়ই অদলবদল হয়ে যায়।


-1

আপনি উদাহরণস্বরূপ ব্যবহার করতে পারেন:

>>> test_list = ['title', 'email', 'password2', 'password1', 'first_name',
                 'last_name', 'next', 'newsletter']
>>> reorder_func = lambda x: x.insert(x.index('password2'),  x.pop(x.index('password2')+1))
>>> reorder_func(test_list)
>>> test_list
... ['title', 'email', 'password1', 'password2', 'first_name', 'last_name', 'next', 'newsletter']

-1

আমি পাইথনের বিশেষজ্ঞ নই তবে আপনি চেষ্টা করতে পারেন: বলুন

i = (1,2)

res = lambda i: (i[1],i[0])
print 'res(1, 2) = {0}'.format(res(1, 2)) 

উপরে o / p দেবে:

res(1, 2) = (2,1)

1
অদলবদলের কীগুলির অবস্থান জেনেও এটি কাজ করে না।
মিক্ল
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.