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


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.