পাইথন তালিকার উপাদানগুলি theyোকানো হয়েছে এমন ক্রমে থাকতে পারে কি তার গ্যারান্টি রয়েছে?


318

আমার যদি নিম্নলিখিত পাইথন কোড থাকে

>>> x = []
>>> x = x + [1]
>>> x = x + [2]
>>> x = x + [3]
>>> x
[1, 2, 3]

হবে xসবসময় হতে নিশ্চিত করা [1,2,3], অথবা অন্তর্বর্তী উপাদানের অন্যান্য orderings সম্ভব?

উত্তর:


479

হ্যাঁ, অজগর তালিকার উপাদানগুলির ক্রম স্থির থাকে।


17
এটি সঠিক উত্তর তাই আমি আর যুক্ত করতে চাই না। তিনি সত্যিই নিজের মনকে স্বাচ্ছন্দ্যের জন্য তালিকা.অপেন্ড ব্যবহার করতে পারেন। docs.python.org/2/tutorial/datastructures.html
এনজি।

1
যদি আমি কোনও ফাংশন থেকে স্থানীয় তালিকাটি ফিরে পাই এবং কলিং ফাংশনে এটি ব্যবহার করি। এটি হ'ল def fn_1(): lst = [] lst.append(1) lst.append(2) return lstআর def fn_2(): print(fn_1())আমি কীভাবে বারবার fn_1 () ব্যবহার করব তা নির্বিশেষে আদেশটি কি সর্বদা একই হবে?
করিকিরিয়েন

6
হ্যাঁ, অজগর তালিকার উপাদানগুলির ক্রম স্থির থাকে। ;)
সেজে

82

সংক্ষেপে, হ্যাঁ, আদেশটি সংরক্ষণ করা হয়েছে। দীর্ঘায়িত:

সাধারণভাবে নিম্নলিখিত সংজ্ঞাগুলি সর্বদা তালিকার মতো বস্তুর ক্ষেত্রে প্রযোজ্য:

একটি তালিকা হ'ল উপাদানগুলির সংকলন যা সদৃশ উপাদান থাকতে পারে এবং একটি সংজ্ঞায়িত আদেশ থাকে যা সাধারণত এটি না করে পরিবর্তন হয় না unless স্ট্যাক এবং সারি হ'ল উভয় ধরণের তালিকা যা উপাদান যুক্ত করতে এবং অপসারণের জন্য নির্দিষ্ট (প্রায়শই সীমাবদ্ধ) আচরণ সরবরাহ করে (স্ট্যাকগুলি LIFO হচ্ছে, সারিগুলি FIFO হচ্ছে)। তালিকাগুলি হ'ল জিনিসগুলির কার্যত উপস্থাপনা। একটি স্ট্রিং অক্ষরগুলির তালিকা হিসাবে ভাবা যেতে পারে, কারণ "abc" != "bca"ক্রমটি গুরুত্বপূর্ণ ( ) এবং স্ট্রিংয়ের সামগ্রীতে নকল অবশ্যই অনুমোদিত ( "aaa"উপস্থিত থাকতে পারে এবং != "a")।

একটি সেট হ'ল উপাদানগুলির সংকলন যা সদৃশ থাকতে পারে না এবং একটি অ-নির্দিষ্ট আদেশ রয়েছে যা সময়ের সাথে পরিবর্তন হতে পারে বা নাও পারে। সেটগুলিতে জিনিসের তালিকা এত বেশি উপস্থাপন করে না যেহেতু তারা নির্দিষ্ট কিছু নির্বাচনের ব্যাপ্তি বর্ণনা করে । সেটটির অভ্যন্তরীণ কাঠামো, এর উপাদানগুলি একে অপরের সাথে তুলনামূলকভাবে কীভাবে সংরক্ষণ করা হয় তা সাধারণত দরকারী তথ্য বোঝাতে বোঝানো হয় না। কিছু বাস্তবায়নে সেটগুলি সর্বদা অভ্যন্তরীণভাবে বাছাই করা হয়; অন্যদের মধ্যে ক্রমটি কেবল অপরিজ্ঞাত (সাধারণত একটি হ্যাশ ফাংশনের উপর নির্ভর করে)।

সংগ্রহ হ'ল একটি জেনেরিক পদ যা অন্যান্য অবজেক্টের একটি (সাধারণত পরিবর্তনশীল) সংখ্যার সঞ্চয় করতে ব্যবহৃত যে কোনও অবজেক্টের উল্লেখ করে। উভয় তালিকা এবং সেটগুলি এক ধরণের সংগ্রহ a টিপলস এবং অ্যারে সাধারণত সংগ্রহ হিসাবে বিবেচিত হয় না। কিছু ভাষা মানচিত্রকে (বিভিন্ন পাত্রের মধ্যে সংযুক্তির বর্ণনা দেয় এমন পাত্রে )ও এক ধরণের সংগ্রহ হিসাবে বিবেচনা করে।

এই নামকরণ প্রকল্পটি পাইথন, সি ++, জাভা, সি #, এবং লিস্প সহ আমি জানি সমস্ত প্রোগ্রামিং ভাষার জন্য সত্য, যা তাদের অর্ডার না রাখার তালিকাগুলি বিশেষত বিপর্যয়কর হবে)। যদি কেহ কেও জানেন যে এটি কেস নয় তবে দয়া করে কেবল তাই বলুন এবং আমি আমার উত্তরটি সম্পাদনা করব। নোট করুন যে নির্দিষ্ট প্রয়োগগুলি এই বিষয়গুলির জন্য অন্যান্য নামগুলি ব্যবহার করতে পারে, যেমন সি ++ তে ভেক্টর এবং ALGOL in৮ এ ফ্লেক্স (উভয় তালিকা; ফ্লেক্সটি প্রযুক্তিগতভাবে কেবল একটি পুনরায় আকারের অ্যারে)।

+এখানে সাইন কীভাবে কাজ করে তার সুনির্দিষ্ট কারণে যদি আপনার ক্ষেত্রে কোনও বিভ্রান্তি থেকে যায় তবে কেবলমাত্র জেনে রাখুন যে তালিকাগুলির জন্য ক্রমটি গুরুত্বপূর্ণ এবং যদি বিশ্বাস না করার খুব ভাল কারণ না থাকে তবে আপনি এই তালিকাটি অপারেশনটিকে অর্ডার সংরক্ষণের জন্য নিরাপদে ধরে নিতে পারবেন। । এই ক্ষেত্রে, +চিহ্নটি স্ট্রিংগুলির মতো এটির মতো আচরণ করে (যা প্রকৃতপক্ষে কেবল অক্ষরের তালিকাগুলি রয়েছে): এটি একটি তালিকার বিষয়বস্তু নিয়ে যায় এবং এটি অন্যের সামগ্রীর পিছনে রাখে।

যদি আমাদের থাকে

list1 = [0, 1, 2, 3, 4]
list2 = [5, 6, 7, 8, 9]

তারপর

list1 + list2

হিসাবে একই

[0, 1, 2, 3, 4] + [5, 6, 7, 8, 9]

যা মূল্যায়ন

[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

অনেকটা পছন্দ

"abdcde" + "fghijk"

উত্পাদন

"abdcdefghijk"

1
আমি কোথাও পড়েছি যেহেতু একটি JSON অ্যারের স্পেসিফিকেশন নির্দিষ্ট করে না যে অ্যারেগুলি অর্ডার বজায় রাখার জন্য অ্যারে অপারেশনগুলি গ্যারান্টিযুক্ত নয়। যদিও আমি এর জন্য উত্সটি খুঁজে পাচ্ছি না। এবং অ্যারের অন্তর্নিহিত কাঠামোটি এখনও সংখ্যাযুক্ত সূচকগুলির সাথে কোনও বস্তুর একটি বিশেষ ক্ষেত্রে, তাই এটি আপনার বক্তব্যটির সাথে বৈপরীত্য নয়, কেবল একটি আকর্ষণীয় সংবাদ, আমি ভেবেছিলাম।
মাল্টিহান্টার

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

1
@ পিন্টুন এই পোস্টটি লেখার কয়েক বছর পরেও ফিরে তাকাচ্ছেন আমি আপনার সাথে একমত agree আমি কী লক্ষ্য করেছিলাম তা প্রকাশ করার জন্য আরও ভাল উপায় বের করার পরে আমি সম্পাদনা করব।
ApproachingDarknessFish

5

আপনি 'সেট' এবং 'তালিকাগুলি' বিভ্রান্ত করছেন। একটি সেট আদেশের গ্যারান্টি দেয় না, তবে তালিকাগুলি করে।

সেট কোঁকড়া বন্ধনী ব্যবহার ঘোষিত হয়: {}। এর বিপরীতে, তালিকা বর্গক্ষেত্র বন্ধনী ব্যবহার করে ঘোষিত হয়: []

mySet = {a, b, c, c}

অর্ডার গ্যারান্টি দেয় না, তবে তালিকাটি করে:

myList = [a, b, c]

1
মনে রাখবেন যে, একটি সেট এছাড়াও গ্যারান্টী বা নিশ্চয়তা দিচ্ছে অ অনুলিপি। একটি তালিকায় সদৃশ উপাদান থাকতে পারে, একটি সেট নাও থাকতে পারে।
নাথানিয়েল ফোর্ড

4

আমি মনে করি একটি জিনিস যা আপনার সম্পর্কে হতে পারে তা হ'ল এন্ট্রিগুলি পরিবর্তন হতে পারে বা না, যাতে উদাহরণস্বরূপ 2 টি আলাদা সংখ্যা হয়ে যায়। আপনি এখানে নিজের মনকে স্বাচ্ছন্দ্য বজায় রাখতে পারেন, কারণ পাইথনে পূর্ণসংখ্যাগর অপরিবর্তনীয় , যার অর্থ তারা তৈরি হওয়ার পরে পরিবর্তন করতে পারে না।

পাইথনের সমস্ত কিছুই অপরিবর্তনীয় নয়, যদিও। উদাহরণস্বরূপ, তালিকাগুলি পরিবর্তনযোগ্য --- সেগুলি তৈরি হওয়ার পরে তারা পরিবর্তন করতে পারে। সুতরাং উদাহরণস্বরূপ, যদি আপনার তালিকাগুলির একটি তালিকা থাকে

>>> a = [[1], [2], [3]]
>>> a[0].append(7)
>>> a
[[1, 7], [2], [3]]

এখানে, আমি প্রথম এন্ট্রি পরিবর্তন করেছি a(আমি এতে যুক্ত হয়েছি 7)। চারপাশের জিনিসগুলি বদলে যাওয়া, এবং আপনি যদি সতর্ক না হন তবে এখানে অপ্রত্যাশিত জিনিসগুলি কল্পনা করতে পারেন (এবং সত্যই, যখন তারা পাইথনে কোনও উপায়ে বা অন্য কোনওভাবে প্রোগ্রামিং শুরু করেন প্রত্যেকের সাথে এটি ঘটে; কেবল লুপিংয়ের সময় একটি তালিকা পরিবর্তন করার জন্য এই সাইটটি অনুসন্ধান করুন) এটি "কয়েক ডজন উদাহরণ দেখতে)।

এটি উল্লেখ করাও মূল্যবান x = x + [a]এবং x.append(a)একই জিনিস নয়। দ্বিতীয়টি পরিবর্তিত হয় xএবং প্রথমটি একটি নতুন তালিকা তৈরি করে এবং এটিকে নির্ধারিত করে x। পার্থক্যটি দেখতে, প্রতিটিটিতে y = xকিছু যুক্ত করার আগে এবং সেটিংস xচেষ্টা করে দেখুন এবং দু'এর মধ্যে পার্থক্যটি দেখুন y


0

aList = [1,2,3]

i = 0

for item in aList:  

    if i<2:  

            aList.remove(item)  

    i+=1  

একটি তালিকা

[2]

নৈতিকতা হল তালিকার দ্বারা চালিত লুপে একটি তালিকা সংশোধন করার সময়, দুটি পদক্ষেপ নেয়:

aList=[1,2,3]
i=0
for item in aList:
    if i<2:
        aList[i]="del"
    i+=1

aList

['del', 'del', 3]
for i in range(2):
    del aList[0]

aList
[3]

0

হ্যাঁ তালিকা এবং টিপলস সর্বদা অর্ডার করা হয় যখন অভিধানগুলি না থাকে not


1
পাইথন 3 বাদে: D
mbeacom
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.