পাইথন তালিকার উপলব্ধিতে আইটেম সূচকটি অ্যাক্সেস করা সম্ভব?


91

নিম্নলিখিত পাইথন কোডটি বিবেচনা করুন যা দিয়ে আমি list21 থেকে 3 অবধি সূচকগুলি সহ একটি নতুন সমস্ত আইটেম যুক্ত করেছি list1:

for ind, obj in enumerate(list1):
    if 4 > ind > 0:
        list2.append(obj)

তালিকার বোধগম্যতা ব্যবহার করে আপনি কীভাবে এটি লিখবেন, যদি গণনার মাধ্যমে সূচকগুলিতে আমার কোনও অ্যাক্সেস না থাকে?

কিছুটা এইরকম:

list2 = [x for x in list1 if 4 > ind > 0]

তবে যেহেতু আমার কোনও indনম্বর নেই, তাই কি এই কাজ করবে?

list2 = [x for x in enumerate(list1) if 4 > ind > 0]

4
আমি অনুমান করি যে আপনার আসল ব্যবহারের বিষয়টি আরও জটিল, তবে আপনি কেবল list1[1:4]এখানে
— টুকরো

আপনি বোঝাতে চাইছেন আমি তালিকার বোধগমনের ভিতরে তালিকায় টুকরো টুকরো করতে পারি? লাইক [x for x in list1[1:4]]:?
— পাভ অ্যামেটভিক

@ পাভ্যামেটভিচ, না @ উইম এর অর্থ আপনি কেবল লিখতে পারেনlist2 = list1[1:4]
— জন লা

উত্তর:



37

আপনি ব্যবহার করেন তাহলে enumerate, আপনি কি সূচক এক্সেস আছে:

list2 = [x for ind, x in enumerate(list1) if 4>ind>0]

10

যদি না আপনার আসল ব্যবহারের কেস আরও জটিল হয় তবে আপনার কেবলমাত্র @ উইমের পরামর্শ অনুসারে একটি তালিকা স্লাইস ব্যবহার করা উচিত

>>> list1 = ['zero', 'one', 'two', 'three', 'four', 'five', 'six']
>>> [x for ind, x in enumerate(list1) if 4 > ind > 0]
['one', 'two', 'three']
>>> list1[1:4]
['one', 'two', 'three']

আরও জটিল ক্ষেত্রে - যদি আপনার আসলে সূচকের প্রয়োজন না হয় - একটি স্লাইস বা আইলিসের মাধ্যমে পুনরাবৃত্তি করা আরও পরিষ্কার r

list2 = [x*2 for x in list1[1:4]]

বা

from itertools import islice
list2 = [x*2 for x in islice(list1, 1, 4)]

ছোট টুকরা জন্য, সহজ list1[1:4]। যদি টুকরোগুলি বেশ বড় আকার ধারণ করতে পারে তবে মেমরির অনুলিপি এড়ানোর জন্য আইসাইল ব্যবহার করা ভাল


ধন্যবাদ তবে যেহেতু আমি নতুন তালিকার ভিতরে এটি সংরক্ষণের আগে বোঝার ভিতরে (x * x বলতে পারি) একটি অপারেশন করতে চাই, দেখে মনে হচ্ছে তালিকার অভ্যন্তরে স্লাইসটি ব্যবহার করা সবচেয়ে ভাল উপায়! ধন্যবাদ
— পাভ অ্যামেটভিক

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