উত্তর:
some_list[-1]
সংক্ষিপ্ততম এবং সর্বাধিক পাইথোনিক।
আসলে, আপনি এই বাক্য গঠনটি দিয়ে আরও অনেক কিছু করতে পারেন। some_list[-n]
সিনট্যাক্স n তম টু শেষ উপাদান পায়। সুতরাং some_list[-1]
, শেষ উপাদান পায় some_list[-2]
গত দ্বিতীয় পায়, ইত্যাদি নিচে সব পথ some_list[-len(some_list)]
, যা আপনি প্রথম উপাদান দেয়।
আপনি এইভাবে তালিকার উপাদানগুলি সেট করতে পারেন। এই ক্ষেত্রে:
>>> some_list = [1, 2, 3]
>>> some_list[-1] = 5 # Set the last element
>>> some_list[-2] = 3 # Set the second to last element
>>> some_list
[1, 3, 5]
নোট করুন যে সূচি অনুসারে একটি তালিকা আইটেম পাওয়া একটি উত্থাপন করবে IndexError
যদি প্রত্যাশিত আইটেমটি বিদ্যমান না থাকে। এর অর্থ এটি খালি some_list[-1]
থাকলে একটি ব্যতিক্রম বাড়িয়ে তুলবে some_list
, কারণ খালি তালিকায় কোনও শেষ উপাদান থাকতে পারে না।
আপনার যদি str()
বা list()
বস্তু যাতে খালি হচ্ছে শেষ পারেন: astr = ''
বা alist = []
, তাহলে আপনি ব্যবহার করতে চাইতে পারেন alist[-1:]
পরিবর্তে alist[-1]
বস্তুর "অভিন্নতা" জন্য।
এর তাত্পর্যটি হ'ল:
alist = []
alist[-1] # will generate an IndexError exception whereas
alist[-1:] # will return an empty list
astr = ''
astr[-1] # will generate an IndexError exception whereas
astr[-1:] # will return an empty str
পার্থক্যটি যেখানে করা হচ্ছে তা হ'ল একটি খালি তালিকার অবজেক্ট বা খালি স্টার অবজেক্টকে ফিরিয়ে দেওয়া আরও "শেষ উপাদান" - এর পরে একটি ব্যতিক্রম বস্তুর মতো।
if len(my_vector) == 0 or my_vector[-1] != update_val
একটি কার্যক্ষম বিন্যাস। তবে এটি অবশ্যই কোনও বিশ্বব্যাপী সমাধান নয় - একটি সিনট্যাক্স ফর্মটি পাওয়া ভাল লাগবে যেখানে ফলাফল কিছুই ছিল না
xs[-1] if xs else None
পাইথনে শেষ উপাদানটি প্রদর্শনের সহজ উপায় হ'ল
>>> list[-1:] # returns indexed value
[3]
>>> list[-1] # returns value
3
এ জাতীয় লক্ষ্য অর্জনের জন্য আরও অনেক পদ্ধতি রয়েছে তবে এগুলি সংক্ষিপ্ত এবং ব্যবহার করতে মধুর।
list[-1]
ত্রুটি করার সময় কাজ করে ।
a[-1:][0]
করতে হবে ? তিনি a[-1]
যাহাই হউক না কেন সরবরাহ করেন। ব্যাখ্যা দয়া করে?
পাইথনে, আপনি কীভাবে তালিকার শেষ উপাদানটি পাবেন?
শুধু শেষ উপাদান পেতে,
-1
সাবস্ক্রিপ্ট নোটেশন পাস :
>>> a_list = ['zero', 'one', 'two', 'three']
>>> a_list[-1]
'three'
সূচি এবং স্লাইসগুলি আর্গুমেন্ট হিসাবে নেতিবাচক পূর্ণসংখ্যার নিতে পারে।
আমি একটি উদাহরণ সংশোধন করেছেন নথিপত্র থেকে একটি ক্রম যা আইটেমটি প্রতিটি সূচক উল্লেখ এই ক্ষেত্রে, স্ট্রিং নির্দেশ করার জন্য "Python"
, -1
রেফারেন্স শেষ উপাদান, চরিত্র, 'n'
:
+---+---+---+---+---+---+
| P | y | t | h | o | n |
+---+---+---+---+---+---+
0 1 2 3 4 5
-6 -5 -4 -3 -2 -1
>>> p = 'Python'
>>> p[-1]
'n'
এই পদ্ধতিটি অগত্যা কেবলমাত্র শেষ উপাদানটি অর্জনের উদ্দেশ্যে একটি দ্বিতীয় তালিকা তৈরি করতে পারে তবে সম্পূর্ণতার জন্য (এবং যেহেতু এটি কোনও পুনরাবৃত্তিকে সমর্থন করে - কেবল তালিকা নয়):
>>> *head, last = a_list
>>> last
'three'
পরিবর্তনশীল নাম, মাথা অপ্রয়োজনীয় নতুন নির্মিত তালিকার সাথে আবদ্ধ:
>>> head
['zero', 'one', 'two']
যদি আপনি এই তালিকাটি দিয়ে কিছু না করার মনস্থ করেন, তবে এটি আরও অ্যাপ্রোপস হবে:
*_, last = a_list
বা, সত্যিই, যদি আপনি জানেন যে এটি একটি তালিকা (বা কমপক্ষে সাবস্ক্রিপ্ট স্বরলিপি গ্রহণ করে):
last = a_list[-1]
একজন মন্তব্যকারী বলেছেন:
আমি আশা করি পাইথনের প্রথম () এবং শেষ () এর জন্য লিস্পের মতো কোনও ফাংশন থাকত ... এটি প্রচুর অপ্রয়োজনীয় ল্যাম্বদা ফাংশন থেকে মুক্তি পাবে।
এগুলি সংজ্ঞায়িত করা বেশ সহজ হবে:
def last(a_list):
return a_list[-1]
def first(a_list):
return a_list[0]
বা ব্যবহার করুন operator.itemgetter
:
>>> import operator
>>> last = operator.itemgetter(-1)
>>> first = operator.itemgetter(0)
উভয় ক্ষেত্রে:
>>> last(a_list)
'three'
>>> first(a_list)
'zero'
আপনি যদি আরও জটিল কিছু করছেন তবে আপনি কিছুটা ভিন্ন উপায়ে শেষ উপাদানটি পেতে আরও পারফরম্যান্স পেতে পারেন।
আপনি যদি প্রোগ্রামিংয়ে নতুন হন তবে আপনার এই বিভাগটি এড়ানো উচিত, কারণ এটি অন্যথায় অ্যালগরিদমের বিভিন্ন অংশকে একত্রে যুক্ত করে। আপনি যদি এক জায়গায় আপনার অ্যালগরিদম পরিবর্তন করেন তবে কোডের অন্য লাইনে এটির অযৌক্তিক প্রভাব থাকতে পারে।
আমি যথাসম্ভব পুরোপুরি সতর্কতা ও শর্ত সরবরাহ করার চেষ্টা করি তবে আমি কিছু মিস করেছি have আপনি যদি মনে করেন আমি একটি সাবধানবাণী ছেড়ে যাচ্ছি দয়া করে মন্তব্য করুন।
তালিকার একটি স্লাইস একটি নতুন তালিকা ফেরত দেয় - তাই আমরা যদি একটি নতুন তালিকায় উপাদানটি দেখতে চাই তবে আমরা -1 থেকে শেষ পর্যন্ত স্লাইস করতে পারি:
>>> a_slice = a_list[-1:]
>>> a_slice
['three']
তালিকাটি ফাঁকা থাকলে এটি ব্যর্থ না হওয়ার উল্টো দিক রয়েছে:
>>> empty_list = []
>>> tail = empty_list[-1:]
>>> if tail:
... do_something(tail)
সূচকের মাধ্যমে অ্যাক্সেস করার চেষ্টা হ'ল IndexError
এটি পরিচালনা করার প্রয়োজন হবে:
>>> empty_list[-1]
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
IndexError: list index out of range
তবে আবার, আপনার প্রয়োজন হলে এই উদ্দেশ্যে স্লাইসিং করা উচিত:
for
লুপপাইথনের বৈশিষ্ট্য হিসাবে, কোনও for
লুপের অভ্যন্তরীণ স্কোপিং নেই ।
আপনি যদি ইতিমধ্যে তালিকার উপরে একটি সম্পূর্ণ পুনরাবৃত্তি সম্পাদন করেন তবে শেষ উপাদানটি এখনও লুপে নির্ধারিত ভেরিয়েবল নাম দ্বারা উল্লেখ করা হবে:
>>> def do_something(arg): pass
>>> for item in a_list:
... do_something(item)
...
>>> item
'three'
এটি শব্দার্থতভাবে তালিকার শেষ জিনিস নয়। এটি শব্দার্থগতভাবে শেষ জিনিসটি, নামটি item
আবদ্ধ ছিল।
>>> def do_something(arg): raise Exception
>>> for item in a_list:
... do_something(item)
...
Traceback (most recent call last):
File "<stdin>", line 2, in <module>
File "<stdin>", line 1, in do_something
Exception
>>> item
'zero'
সুতরাং এটি কেবলমাত্র যদি থাকে তবে শেষ উপাদানটি পেতে ব্যবহার করা উচিত
শেষ উপাদানটি সরিয়ে এবং ফিরে আসার মাধ্যমে আমরা আমাদের মূল তালিকাটিও পরিবর্তন করতে পারি:
>>> a_list.pop(-1)
'three'
>>> a_list
['zero', 'one', 'two']
তবে এখন মূল তালিকাটি পরিবর্তন করা হয়েছে।
( -1
আসলে ডিফল্ট আর্গুমেন্ট, সুতরাং list.pop
কোনও সূচক যুক্তি ছাড়াই ব্যবহার করা যেতে পারে):
>>> a_list.pop()
'two'
কেবল যদি এটি করুন
এগুলি বৈধ ব্যবহারের ক্ষেত্রে, তবে খুব সাধারণ নয়।
আপনি কেন এটি করেছেন তা আমি জানি না, তবে সম্পূর্ণতার জন্য, যেহেতু reversed
একজন পুনরাবৃত্তি প্রদান করে (যা পুনরায় প্রোটোকলের সমর্থন করে) আপনি তার ফলাফলটি এখানে পাস করতে পারেন next
:
>>> next(reversed([1,2,3]))
3
সুতরাং এটি এর বিপরীত করার মত:
>>> next(iter([1,2,3]))
1
তবে আমি এটি করার কোনও ভাল কারণ সম্পর্কে ভাবতে পারি না, যদি না আপনার পরে বাকী বিপরীত পুনরুদ্ধার প্রয়োজন হয়, যা সম্ভবত এটির মতো আরও দেখাবে:
reverse_iterator = reversed([1,2,3])
last_element = next(reverse_iterator)
use_later = list(reverse_iterator)
এবং এখন:
>>> use_later
[2, 1]
>>> last_element
3
প্রতিরোধ করতে IndexError: list index out of range
, এই বাক্য গঠনটি ব্যবহার করুন:
mylist = [1, 2, 3, 4]
# With None as default value:
value = mylist and mylist[-1]
# With specified default value (option 1):
value = mylist and mylist[-1] or 'default'
# With specified default value (option 2):
value = mylist[-1] if mylist else 'default'
অন্য পদ্ধতি:
some_list.reverse()
some_list[0]
lst[-1]
সর্বোত্তম পন্থা, তবে সাধারণ পুনরাবৃত্তের সাথে বিবেচনা করুন more_itertools.last
:
কোড
import more_itertools as mit
mit.last([0, 1, 2, 3])
# 3
mit.last(iter([1, 2, 3]))
# 3
mit.last([], "some default")
# 'some default'
list[-1]
তালিকা পরিবর্তন না করে তালিকার শেষ উপাদানটি পুনরুদ্ধার করবে।
list.pop()
তালিকার শেষ উপাদানটি পুনরুদ্ধার করবে, তবে এটি পরিবর্তিত হবে / মূল তালিকা পরিবর্তন করবে। সাধারণত, মূল তালিকাটি পরিবর্তনের পরামর্শ দেওয়া হয় না।
বিকল্পভাবে, যদি কোনও কারণে আপনি কম অজগর সম্পর্কিত কিছু সন্ধান করছেন, list[len(list)-1]
তবে তালিকাটি খালি নয় বলে ধরে নিয়ে আপনি ব্যবহার করতে পারেন ।
আপনি নীচের কোডটিও ব্যবহার করতে পারেন, যদি তালিকাটি খালি থাকে তবে আপনি সূচিপত্রটি পেতে চান না।
next(reversed(some_list), None)
ঠিক আছে, তবে প্রায় প্রতিটি ভাষার উপায়ে সাধারণ কী items[len(items) - 1]
? এটি সর্বশেষ উপাদানটি পাওয়ার সবচেয়ে সহজ উপায় আইএমও, কারণ এর জন্য পাইথোনিক জ্ঞানের কোনও প্রয়োজন হয় না ।
some_list[-1]
পদ্ধতির চেয়ে কিছুটা ক্ষেত্রে ভাল, কারণ এটি আরও যুক্তিযুক্ত, এবং এটি দেখায় যে এটি আসলে some_list[-1]
আমার মতের চেয়ে ভাল কি করছে ।
some_list.last
- এটি কোডের সুন্দর লাইন হবে