সিকোয়েন্সের জন্য পাইথন 'গণনা' এর সমপরিমাণ কী?


97

পুনরাবৃত্ত জোড় জোড়া পেতে পাইথনের একটি অন্তর্নির্মিত ফাংশন রয়েছেenumerate(index, item)

ES6 এর কোন অ্যারের সমতুল্য রয়েছে? এটা কি?

def elements_with_index(elements):
    modified_elements = []
    for i, element in enumerate(elements):
         modified_elements.append("%d:%s" % (i, element))
    return modified_elements

print(elements_with_index(["a","b"]))
#['0:a', '1:b']

ES6 সমতুল্য enumerate:

function elements_with_index(elements){
     return elements.map(element => elements.indexOf(element) + ':' + element);
 }

console.log(elements_with_index(['a','b']))
//[ '0:a', '1:b' ]

তবে মানচিত্র বা forEach প্রতিটি ইতিমধ্যে এটি করে থাকে, উপাদান এবং সূচি উভয়ই পেতে পারে
জুলিয়ান

@ জিউভিয়ান যেমন বলেছে, কেন কেবল মানচিত্রে থাকা সূচকটি ব্যবহার করবেন না? elements.map(( element, i ) => `${ i }:${ element }`);
জেমস আলার্ডাইস

মোজিলা থেকে ডক্ট নিয়ে জেমস অ্যালার্ডাইস: elements.map((element,index) => index + ':' + element)
গিলিয়াম ভিনসেন্ট

উত্তর:


104

হ্যাঁ আছে, চেক আউট Array.prototype.entries()

const foobar = ['A', 'B', 'C'];

for (const [index, element] of foobar.entries()) {
  console.log(index, element);
}


4
এটি, এত সহজ, এত দুর্দান্ত। এটা তোলে পাইথন কাছাকাছি enumerateতুলনায় [].map(), এটি একটি পুনরুক্তিকারীর ফেরৎ।
শানুর

4
এটি মানচিত্র ((এল, আইডিএক্স) => ..) ব্যবহার করার সমতুল্য নয়, যেহেতু আপনি সম্ভবত একটি সম্পাদন করতে চান filterতবে ফিল্টারিংয়ের আগে আপনার সূচকগুলি বজায় রাখতে চান ।
derekdreery

26

Array.prototype.mapকলব্যাক পদ্ধতির দ্বিতীয় যুক্তি হিসাবে ইতিমধ্যে আপনাকে সূচকটি দিয়েছে ... এবং এটি প্রায় সর্বত্র সমর্থিত

['a','b'].map(function(element, index) { return index + ':' + element; });
//=> ["0:a", "1:b"]

আমি ইএস 6ও পছন্দ করি

['a','b'].map((e,i) => `${i}:${e}`)
//=> ["0:a", "1:b"]

এটি ইমো এর চেয়ে ভালentries()
স্টিফেনবোশ


5

যদি আমি অজ্ঞ হয়ে থাকি তবে আমাকে ক্ষমা করুন (জাভাস্ক্রিপ্টের জন্য এক নবাগত কিছুটা এখানে), তবে আপনি কি কেবল ব্যবহার করতে পারবেন না forEach? যেমন:

function withIndex(elements) {
    var results = [];
    elements.forEach(function(e, ind) {
        results.push(`${e}:${ind}`);
    });
    return results;
}

alert(withIndex(['a', 'b']));

এর রয়েছে naomik এর উত্তর যা এই নির্দিষ্ট ব্যবহারের ক্ষেত্রে জন্য একটি ভাল হইয়া, কিন্তু আমি ঠিক যে বাতলান চেয়েছিলেন forEachএছাড়াও বিল দেখাচ্ছে।

ES5 + সমর্থিত।


5

pythonicenumerateকেবলমাত্র অ্যারে নয়, সমস্ত পুনরাবৃত্তির উপর কাজ করে এমন একটি ফাংশন সরবরাহ করে এবং পাইথনের মতো একজন আইট্রেটারকে ফিরিয়ে দেয় :

import {enumerate} from 'pythonic';

const arr = ['a', 'b'];
for (const [index, value] of enumerate(arr))
    console.log(`index: ${index}, value: ${value}`);
// index: 0, value: a
// index: 1, value: b

প্রকাশ আমি পাইথোনিকের লেখক এবং রক্ষণাবেক্ষণকারী


4
আপনি উল্লেখ করতে দয়া করে উল্লেখ করুন pythonic। স্ট্যাক ওভারফ্লো এর সহায়তা কেন্দ্রে কীভাবে স্প্যামার হবেন না সেই অনুসারে , "এখানকার সম্প্রদায়টি স্ব-প্রচার প্রচারের পক্ষে ভোট দেয় এবং এটিকে স্প্যাম হিসাবে পতাকাঙ্কিত করে good আপনার পণ্য বা ওয়েবসাইট, এটি ঠিক আছে However তবে আপনার
জবাবগুলিতে

4
@ কেভেন সলোমন সম্পূর্ণ সঠিক is আপনি এই গ্রন্থাগারটির মালিক, আপনি এর একমাত্র লেখক এবং এতে অবদানকারী। আপনি লাইসেন্সটি বেছে নেওয়ার উপায়টি প্রাসঙ্গিক নয়। আপনার নিজের মালিকানা প্রকাশ বা আপনার যে কোনও লাইব্রেরি, পণ্য, নিবন্ধ, ইত্যাদির সাথে সম্পর্কিত যা আপনার পোস্টে প্রস্তাবিত বা লিঙ্ক করা প্রয়োজন। এটি একটি খুব সাধারণ প্রয়োজন, আপনার পক্ষে কেউ অভদ্র আচরণ করছে না বা অযৌক্তিক কিছু চাইছে না।
মেগার

আপনার অনুরোধ অনুযায়ী যোগ হয়েছে
কেভান

1

যেমন Kyleএবং Shanoorবলে অ্যারে.প্রোটোটাইপ.েন্ট্রি ()

তবে আমার মতো নবজাতকের পক্ষে, এর অর্থ পুরোপুরি বুঝতে অসুবিধা।

সুতরাং এখানে একটি বোধগম্য উদাহরণ দিন:

for(let curIndexValueList of someArray.entries()){
  console.log("curIndexValueList=", curIndexValueList)
  let curIndex = curIndexValueList[0]
  let curValue = curIndexValueList[1]
  console.log("curIndex=", curIndex, ", curValue=", curValue)
}

pythonকোড সমতুল্য :

for curIndex, curValue in enumerate(someArray):
  print("curIndex=%s, curValue=%s" % (curIndex, curValue))
}
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.