তালিকা সূচক উপস্থিত থাকলে এক্স করুন do


128

আমার প্রোগ্রামে, ব্যবহারকারী ইনপুট সংখ্যা nএবং তারপরে nস্ট্রিংগুলির সংখ্যার ইনপুট দেয় , যা একটি তালিকায় সঞ্চিত হয়।

আমার এমন কোড দরকার যে যদি একটি নির্দিষ্ট তালিকা সূচক উপস্থিত থাকে তবে একটি ফাংশন চালান।

এটিকে আরও জটিল করে তুলেছে যে আমি বিবৃতি দিলে নেস্ট করেছি len(my_list)

আমার এখন যা আছে তার একটি সরলীকৃত সংস্করণ এখানে, যা কাজ করছে না:

n = input ("Define number of actors: ")

count = 0

nams = []

while count < n:
    count = count + 1
    print "Define name for actor ", count, ":"
    name = raw_input ()
    nams.append(name)

if nams[2]: #I am trying to say 'if nams[2] exists, do something depending on len(nams)
    if len(nams) > 3:
        do_something
    if len(nams) > 4
        do_something_else

if nams[3]: #etc.

1
দেখে মনে হচ্ছে আপনি nকোনও তালিকা হিসাবে নয়, পূর্ণসংখ্যা হিসাবে কাস্ট টাইপ করতে চান । আমি বিভ্রান্ত
এমভিসিএইচআর ২২ শে

2
হ্যাঁ, এখানে বাস্তব সমস্যা ব্যবহার করছে nপরিবর্তে namsমধ্যে ifগুলি
Wooble

আপনার ক্ষেত্রে n একটি তালিকা নয়। প্রথমে এটি পূর্ণসংখ্যা হিসাবে পরীক্ষা করুন (কাস্ট করুন), তারপরে আপনি যে প্রভাবটি অর্জন করতে চান তার উপর নির্ভর করে আপনি পুনরাবৃত্তি বা অঙ্ক করতে পারবেন could
লেটব্যাক

হ্যাঁ, ভুল টাইপ করা হয়েছে
নামগুলির সাথে

"লেন (মাই_লিস্ট) সম্পর্কে বিবৃতি দেওয়া থাকলে আমার কাছে সাবধানতা আছে" " lenতালিকার অন্ততপক্ষে একটি নির্দিষ্ট মান হ'ল কোন সূচক সূচকগুলি বিদ্যমান তা সম্পর্কে কি বোঝানো হয়েছে ?
কার্ল নচেটেল

উত্তর:


157

len(n)আপনার n[i]পক্ষে প্রতিটি সম্ভাব্য দৈর্ঘ্যের জন্য পরীক্ষা না করে নিজের সিদ্ধান্তকে জানাতে তালিকার দৈর্ঘ্যটি ব্যবহার করা আরও কার্যকর হতে পারে কি ?


6
হাঁ। কোডটি পর্যালোচনা করার পরে, আমার সেটআপটি পুরোপুরি অতিমাত্রায় ছিল; লেন (এন) আমার প্রয়োজনীয় সমস্ত কিছুই সম্পাদন করেছে। সঠিক দিকের জন্য একটি পয়েন্ট জন্য ধন্যবাদ।
ব্যবহারকারী 1569317

1
এটি নেতিবাচক সূচকগুলির জন্য অ্যাকাউন্ট করে না। আমার জানা সবচেয়ে ভাল উপায় হ'ল ইনডেক্সেরর বাদে চেষ্টা / চেষ্টা করা, তবে একটি বুল করার সংক্ষিপ্ত উপায়টি পাওয়া ভাল লাগবে
আব্রাম

পাইথনের নেতিবাচক সূচকে তালিকাগুলি তালিকার শেষ থেকে পিছনের দিকে গুনে। সুতরাং তারা তালিকার দৈর্ঘ্যকে এমনভাবে প্রভাবিত করতে পারে না।
JonathanV

84

আমার এমন কোড দরকার যে যদি একটি নির্দিষ্ট তালিকা সূচক উপস্থিত থাকে তবে একটি ফাংশন চালান।

এটি ট্রাই ব্লকের সঠিক ব্যবহার :

ar=[1,2,3]

try:
    t=ar[5]
except IndexError:
    print('sorry, no 5')   

# Note: this only is a valid test in this context 
# with absolute (ie, positive) index
# a relative index is only showing you that a value can be returned
# from that relative index from the end of the list...

তবে সংজ্ঞা অনুসারে পাইথন তালিকার মধ্যে থাকা সমস্ত আইটেমের মধ্যে 0এবং len(the_list)-1উপস্থিত রয়েছে (যেমন, চেষ্টা করার দরকার নেই, যদি না জানেন তবে0 <= index < len(the_list) )।

আপনি যদি 0 এবং শেষ উপাদানটির মধ্যে সূচকগুলি চান তবে আপনি গণনা ব্যবহার করতে পারেন :

names=['barney','fred','dino']

for i, name in enumerate(names):
    print(i + ' ' + name)
    if i in (3,4):
        # do your thing with the index 'i' or value 'name' for each item...

আপনি যদি কিছু সংজ্ঞায়িত 'সূচক' চিন্তার সন্ধান করেন তবে আমার মনে হয় আপনি ভুল প্রশ্ন করছেন। সম্ভবত আপনার ম্যাপিং ধারক (যেমন ডিক হিসাবে) বনাম একটি সিকোয়েন্স পাত্রে (যেমন একটি তালিকা) ব্যবহার বিবেচনা করা উচিত । আপনি নিজের কোডটি আবার লিখতে পারেন:

def do_something(name):
    print('some thing 1 done with ' + name)

def do_something_else(name):
    print('something 2 done with ' + name)        

def default(name):
    print('nothing done with ' + name)     

something_to_do={  
    3: do_something,        
    4: do_something_else
    }        

n = input ("Define number of actors: ")
count = 0
names = []

for count in range(n):
    print("Define name for actor {}:".format(count+1))
    name = raw_input ()
    names.append(name)

for name in names:
    try:
        something_to_do[len(name)](name)
    except KeyError:
        default(name)

এইভাবে চলমান:

Define number of actors: 3
Define name for actor 1: bob
Define name for actor 2: tony
Define name for actor 3: alice
some thing 1 done with bob
something 2 done with tony
nothing done with alice

আপনি সংক্ষিপ্ত সংস্করণ ব্যতীত চেষ্টা / পরিবর্তে .get পদ্ধতি ব্যবহার করতে পারেন :

>>> something_to_do.get(3, default)('bob')
some thing 1 done with bob
>>> something_to_do.get(22, default)('alice')
nothing done with alice

3
ব্লক চেষ্টা? আমি পাইথনের একটি শিক্ষানবিস তবে এটি মনে হচ্ছে প্রোগ্রামিংয়ে বড় কোনও নয় ... প্রবাহ নিয়ন্ত্রণের জন্য ব্যতিক্রম? যে জিনিসগুলি আমরা সঠিকভাবে নিয়ন্ত্রণ করতে পারি না তার জন্য ব্যতিক্রম হওয়া উচিত?
লুইস

3
@ লুইস আমি পাইথনেরও একজন শিক্ষানবিস, তবে আমি এই উদাহরণগুলিতে ব্যতিক্রম হ্যান্ডলিংটি যা পড়েছি তা হ'ল পাইথন শৈলীটি সি / জাভা / সি # প্রচার করে না। দেখুন stackoverflow.com/questions/11360858/...
Tinister

'0 এবং লেন (তালিকা) এর মধ্যে পাইথন তালিকার সমস্ত সূচক' বাক্যটি একেবারেই ভুল। ধরা যাক একটি তালিকা x = [1, 2, 3] রয়েছে যা লেন_এক্স = 3। 3 এর মতো সূচী নেই। বাক্যটি হওয়া উচিত ছিল: 'পাইথন তালিকার সমস্ত সূচক 0 এবং লেনের মধ্যে (তালিকা) - 1' ।
লিয়র ম্যাগেন

9
@ লাইয়ারম্যাগেন: আপনি ঠিক বলেছেন এবং আমি এটি সম্পাদনা করেছি। এই জাতীয় পেডেন্টিক ত্রুটির জন্য মোটামুটি জনপ্রিয় পোস্টে ভোট দেওয়া কঠোর। একটি সহজ মন্তব্য যথেষ্ট হবে।
Dawg

আমি বাতলান করব যে একটি ভিতরে কিছু স্টিকিং tryনেই না আপনাকে বলতে যদি সূচক বিদ্যমান শুধু যদি তা না হয় fetchable - নিতে -1- যে সূচক সত্যিই নেই অস্তিত্ব কিন্তু একটি মান প্রত্যাবর্তিত হবে না।
জর্জ মাউয়ার 21

17

len(nams)nআপনার কোড সমান হতে হবে । সমস্ত সূচক 0 <= i < n"বিদ্যমান"।


15

এটি কেবল নিম্নলিখিত কোড ব্যবহার করে করা যেতে পারে:

if index < len(my_list):
    print(index, 'exists in the list')
else:
    print(index, "doesn't exist in the list")

6

আমার এমন কোড দরকার যে যদি একটি নির্দিষ্ট তালিকা সূচক উপস্থিত থাকে তবে একটি ফাংশন চালান।

আপনি এর জন্য কীভাবে পরীক্ষা করবেন তা আপনি ইতিমধ্যে জানেন এবং বাস্তবে আপনার কোডটিতে ইতিমধ্যে এই জাতীয় পরীক্ষা করা হচ্ছে

দৈর্ঘ্য একটি তালিকা জন্য বৈধ সূচকের nহয় 0মাধ্যমেn-1 সমেত।

সুতরাং, তালিকার দৈর্ঘ্য কমপক্ষে i যদি হয় তবে কেবল একটি তালিকার একটি সূচক থাকেi + 1


হ্যাঁ, আমার সমস্যা সমাধানের জন্য আমার কাছে সরঞ্জাম ছিল, কেবল সেগুলি পরিষ্কারভাবে প্রয়োগ করা হয়নি। সঠিক দিকের জন্য একটি পয়েন্ট জন্য ধন্যবাদ।
ব্যবহারকারী 1569317

এর জন্য ধন্যবাদ, বিশেষত শেষ বাক্যটি যা পাইথন তালিকার একটি গুরুত্বপূর্ণ সম্পত্তি যা এগুলিকে জাভাস্ক্রিপ্ট অ্যারে এবং অন্যান্য অনুরূপ নির্মাণ থেকে আলাদা করে তোলে।
রবার্ট

6

তালিকার দৈর্ঘ্যটি ব্যবহার করা কোনও সূচক উপস্থিত রয়েছে কিনা তা পরীক্ষা করার দ্রুততম সমাধান হবে:

def index_exists(ls, i):
    return (0 <= i < len(ls)) or (-len(ls) <= i < 0)

এটি নেতিবাচক সূচকগুলির জন্য এবং বেশিরভাগ সিকোয়েন্স প্রকারের (যেমন rangesএবং এর জন্যও পরীক্ষা করেstr গুলি) যার দৈর্ঘ্য রয়েছে।

যদি আপনার পরে সেই সূচীতে আইটেমটি অ্যাক্সেস করার প্রয়োজন হয় তবে অনুমতি চেয়ে ক্ষমা চাওয়া সহজ , এবং এটি দ্রুত এবং আরও বেশি পাইথোনিক। ব্যবহার try: except:

try:
    item = ls[i]
    # Do something with item
except IndexError:
    # Do something without the item

এটি যেমন বিরোধিতা করবে:

if index_exists(ls, i):
    item = ls[i]
    # Do something with item
else:
    # Do something without the item

3

যদি আপনি actorsোকানো অভিনেতাদের ডেটা পুনরাবৃত্তি করতে চান:

for i in range(n):
    if len(nams[i]) > 3:
        do_something
    if len(nams[i]) > 4:
        do_something_else

1

ঠিক আছে, তাই আমি মনে করি এটি আসলে সম্ভব (যুক্তি স্বার্থে):

>>> your_list = [5,6,7]
>>> 2 in zip(*enumerate(your_list))[0]
True
>>> 3 in zip(*enumerate(your_list))[0]
False

: যদিও এই এমনকি সহজ হবে3 in range(len(your_list)
avloss

1
বা এমনকি এটি 3 in xrange(len(your_list)- সম্ভবত এর চেয়ে ভাল আর করতে পারে না
শে

1

আপনি এরকম কিছু চেষ্টা করতে পারেন

list = ["a", "b", "C", "d", "e", "f", "r"]

for i in range(0, len(list), 2):
    print list[i]
    if len(list) % 2 == 1 and  i == len(list)-1:
        break
    print list[i+1];

1

এক রৈখিক:

do_X() if len(your_list) > your_index else do_something_else()  

সম্পূর্ণ উদাহরণ:

In [10]: def do_X(): 
    ...:     print(1) 
    ...:                                                                                                                                                                                                                                      

In [11]: def do_something_else(): 
    ...:     print(2) 
    ...:                                                                                                                                                                                                                                      

In [12]: your_index = 2                                                                                                                                                                                                                       

In [13]: your_list = [1,2,3]                                                                                                                                                                                                                  

In [14]: do_X() if len(your_list) > your_index else do_something_else()                                                                                                                                                                      
1

শুধু তথ্যের জন্য। ইমো, try ... except IndexErrorভাল সমাধান।


-3

আপনার বন্ধনীগুলির সামনে কোনও স্থান দেবেন না।

উদাহরণ:

n = input ()
         ^

টিপ: আপনার কোড এবং এর অধীনে আপনার মন্তব্যগুলি যুক্ত করা উচিত। আপনার কোড পিছনে না।


আপনার দিনটি শুভ হোক.


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

-3

সহজ উত্তর নয় অনেক উত্তর।

অভিধান ডিকটিতে একটি সূচক 'আইডি' রয়েছে কিনা তা পরীক্ষা করতে:

dic = {}
dic['name'] = "joao"
dic['age']  = "39"

if 'age' in dic

সত্য যদি 'বয়স' বিদ্যমান থাকে ফিরে আসে।


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