একটি তালিকা অন্যের উপসেট হলে কীভাবে যাচাই করব?


184

তালিকাটি অন্যটির সাবসেট কিনা তা যাচাই করতে হবে - আমি যে বুলিয়ান রিটার্ন চাইছি তা হ'ল।

ছেদ করার পরে কি ছোট তালিকায় সমতা পরীক্ষা করা এটি করার দ্রুততম উপায়? যে তুলনামূলকভাবে ডেটাসেটের সংখ্যা প্রয়োজন তা বিবেচনা করে পারফরম্যান্স সর্বোচ্চ গুরুত্ব দেয়।

আলোচনার ভিত্তিতে আরও তথ্য যুক্ত করা:

  1. তালিকার দুটিই কি অনেক পরীক্ষার জন্য একই হবে? এটিগুলির মধ্যে একটি স্থিতিশীল দেখার টেবিল হিসাবে রয়েছে।

  2. এটি একটি তালিকা হতে হবে? এটি হয় না - স্ট্যাটিক লুক টেবিল এমন কোনও কিছু হতে পারে যা সেরা সম্পাদন করে। ডায়নামিক হ'ল একটি ডিক যা থেকে আমরা স্ট্যাটিক লুকআপ করার জন্য কীগুলি বের করি।

দৃশ্যের ভিত্তিতে সর্বোত্তম সমাধানটি কী হবে?


আপনি গতি উল্লেখ করেছেন, সম্ভবত ব্যবহারগুলি আপনার ব্যবহারের উপর নির্ভর করে কাজে লাগবে।
নিনমনকি

2
তালিকার আইটেমগুলি কি ধাবনযোগ্য?
উইম

2
যদি অর্ডারটি গুরুত্বপূর্ণ হয় তবে এটি একটি ভাল সূচনা হতে পারে - স্ট্যাকওভারফ্লো - পাইথনের কোনও সিকোয়েন্সটি যদি অন্য ক্রমে থাকে তবে নির্ধারণের সেরা উপায়

আপনার কি উপযুক্ত সাবসেট দরকার, না সেগুলি সমান হতে পারে?
törzsmókus

2
সেট (লিস্ট_এ) না কেন? মিস সাবসেট (সেট (লিস্ট_বি))?
সেফ

উত্তর:


126

পাইথন এর জন্য প্রদত্ত পারফরমেন্ট ফাংশনটি set.issubset। এটিতে আপনার কিছু প্রশ্নের সীমাবদ্ধতা রয়েছে যা এটি আপনার প্রশ্নের উত্তর কিনা তা অস্পষ্ট করে তোলে।

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

আপনি কি সাবসেট বা উপসত্তা সম্পর্কে জিজ্ঞাসা করছেন (যার অর্থ আপনি একটি স্ট্রিং অনুসন্ধান অ্যালগরিদম চান)? তালিকার দুটিই কি অনেক পরীক্ষার জন্য একই হবে? তালিকায় থাকা ডেটাটাইপগুলি কী কী? এবং এই বিষয়টির জন্য, এটির তালিকা হওয়া দরকার?

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


আমি কেবল একটি সাবসেটের কথা উল্লেখ করছি এবং ইস্যুবসেট ঠিক সূক্ষ্ম পারফর্ম করে - ধন্যবাদ তবে আমি এখানে 2 টি প্রশ্ন সম্পর্কে কৌতূহলী। 1. তালিকাগুলির দুটিই কি অনেক পরীক্ষার জন্য একই হবে? এটিগুলির মধ্যে একটি স্থির দেখার টেবিল হিসাবে এটি করে? ২. এটির তালিকা হওয়া দরকার? এটি হয় না - স্ট্যাটিক লুক টেবিল এমন কোনও কিছু হতে পারে যা সেরা সম্পাদন করে। ডায়নামিক হ'ল একটি ডিক যা থেকে আমরা স্ট্যাটিক লুকআপ করার জন্য কীগুলি বের করি। এই বাস্তবতা কি সমাধানের পরিবর্তন করবে?
অজানা

বেশি না. অভিধানের কীগুলি সেট-এর মতো এবং ইতিমধ্যে একটি হ্যাশ টেবিলটিতে সজ্জিত, এবং অতএব স্থির অংশের জন্য একটি সেট ব্যবহার করা অতিরিক্ত জটিলতা সৃষ্টি করবে না। মূলত একটি হ'ল ডিকের অর্থ হ'ল আপনাকে স্থির অংশটিকে কোনও সেটে রূপান্তর করতে হবে না (আপনি ও (এন) পারফরম্যান্সের সাহায্যে সমস্ত (itertools.imap (ডিক.হাস_কি, মাইলিস্ট)) পরীক্ষা করতে পারেন।
ইয়ান ভার্নিয়ার

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

প্রসঙ্গ বিষয়; এটি প্রশ্নকারীকে সহায়তা করার জন্য গৃহীত হয়েছিল এবং পার্থক্যটি ব্যাখ্যা করেছিল। আমাদের জানানো হয়েছিল যে প্রার্থীরা সেট হিসাবে প্রতিনিধিত্ব করতে পারবেন, সুতরাং এটি একটি নির্ধারিত কাজ ছিল। আপনার কেসটি আলাদা হতে পারে এবং আপনি যে পার্থক্যটি উল্লেখ করেছেন সেটি সংগ্রহের মতো মলিসেট ব্যবহার করে সমাধান করা হবে oun কাউন্টার।
ইয়ান ভার্নিয়ার

140
>>> a = [1, 3, 5]
>>> b = [1, 3, 5, 8]
>>> c = [3, 5, 9]
>>> set(a) <= set(b)
True
>>> set(c) <= set(b)
False

>>> a = ['yes', 'no', 'hmm']
>>> b = ['yes', 'no', 'hmm', 'well']
>>> c = ['sorry', 'no', 'hmm']
>>> 
>>> set(a) <= set(b)
True
>>> set(c) <= set(b)
False

21
এটি দেখতে সবচেয়ে সুন্দর দেখাচ্ছে এবং সহজতম লিখেছেন, তবে দ্রুততম হওয়া উচিত set(a).issubset(b) কারণ এই ক্ষেত্রে আপনি কেবল aসেটে রূপান্তর করেন তবে নয় b, যা সময় সাশ্রয় করে। আপনি timeitদুটি আদেশে ব্যয় করা সময়ের তুলনা করতে ব্যবহার করতে পারেন । উদাহরণস্বরূপ, timeit.repeat('set(a)<set(b)', 'a = [1,3,5]; b = [1,3,5,7]', number=1000) এবং timeit.repeat('set(a).issubset(b)', 'a = [1,3,5]; b = [1,3,5,7]', number=1000)
ইয়ুলান লিউ

8
@ ইউলানলিউ: এটি আপনার কাছে ঘৃণা করার ঘৃণা, তবে প্রথমটি issubsetযাচাই করে তা হল আর্গুমেন্টটি একটি set/ frozensetকিনা, এবং যদি তা না হয় তবে এটি এটিকে setতুলনার জন্য একটি অস্থায়ী হিসাবে রূপান্তরিত করে , চেকটি চালায়, এবং অস্থায়ীটিকে ফেলে দেয় setসময় পার্থক্য (যদি থাকে তবে) এলইজিবি অনুসন্ধানের ব্যয়গুলির মধ্যে ছোট পার্থক্যের একটি কারণ হতে পারে ( setদ্বিতীয় বার সন্ধান করা কোনও বিদ্যমান বৈশিষ্ট্যের চেয়ে গুণাবলীর চেয়ে বেশি ব্যয়বহুল set), তবে এটি বেশিরভাগ ক্ষেত্রে পর্যাপ্ত পরিমাণের ইনপুটগুলির জন্য একটি ধোয়া।
শেডোএ্যাঞ্জার

3
যদি উভয় তালিকায় একই মান রয়েছে, তবে এটি একটি মিথ্যা ফিরতে চলেছে, শর্তটি (a) <= সেট (খ) পরিবর্তে সেট করা উচিত
ssi-anik

2
এই উত্তরটি কীভাবে সঠিক হতে পারে। তিনি একটি সেট নয় একটি তালিকা চেয়েছিলেন। এগুলি সম্পূর্ণ আলাদা। A = [1, 3, 3, 5, 5] এবং বি = [1, 3, 3, 3, 5] হলে কি হবে। সেট থিওরি সদৃশগুলির জন্য অনুপযুক্ত।
ইমন কেনি

1
আমি আরও উল্লেখ করতে চাই যে যদি a = [1,3,5] এবং b = [1,3,5], সেট (ক) <সেট (খ) মিথ্যা ফিরিয়ে দেবে। আপনি এই কেসগুলি পরিচালনা করতে সমান অপারেটর যুক্ত করতে পারেন: যেমন সেট (ক) <= সেট (খ)।
জন

37
one = [1, 2, 3]
two = [9, 8, 5, 3, 2, 1]

all(x in two for x in one)

ব্যাখ্যা: জেনারেটর তালিকা মাধ্যমে looping দ্বারা Booleans তৈরি oneপরীক্ষণ যদি আইটেমটি তালিকায় রয়েছে two। যদি প্রতিটি আইটেম সত্য হয় তবে তা all()ফেরত দেয় ।TrueFalse

এখানে একটি সুবিধা রয়েছে যা allপ্রতিটি আইটেমটি প্রক্রিয়া করার চেয়ে একটি অনুপস্থিত উপাদানটির প্রথম ক্ষেত্রে মিথ্যা ফেরত দেয়।


আমি মনে করি পাঠযোগ্যতার জন্য এবং আপনি যা অর্জন করার চেষ্টা করছেন তা স্পষ্ট হওয়া, set(one).issubset(set(two))এটি একটি দুর্দান্ত সমাধান। আমি পোস্ট করা সমাধানের সাথে আপনার যদি কোনও তুলনামূলক অপারেটর সংজ্ঞায়িত করা থাকে তবে যে কোনও অবজেক্টের সাথে এটি ব্যবহার করতে সক্ষম হবেন।
ভয়েডনোলোগো

4
একটি জেনারেটর এক্সপ্রেশন ব্যবহার করুন, তালিকা অনুধাবন নয়; প্রাক্তন allসঠিকভাবে শর্ট সার্কিটের অনুমতি দেবে , পরেরটি সমস্ত চেক সঞ্চালন করবে এমনকি যদি পরীক্ষাটি ব্যর্থ হবে তা প্রথম চেক থেকে পরিষ্কার হয়ে যায়। পেতে স্কোয়ার বন্ধনীগুলি ফেলে দিন all(x in two for x in one)
শ্যাডোএ্যাঞ্জার

আমি কি ভুল করছি, না আপনি স্থানীয়দের সাথে এই পদ্ধতিটি ব্যবহার করতে পারবেন না?
হাম্পার

22

ধরে নিচ্ছি আইটেমগুলি হ্যাশযোগ্য

>>> from collections import Counter
>>> not Counter([1, 2]) - Counter([1])
False
>>> not Counter([1, 2]) - Counter([1, 2])
True
>>> not Counter([1, 2, 2]) - Counter([1, 2])
False

যদি আপনি সদৃশ আইটেমগুলি সম্পর্কে উদ্বিগ্ন না হন। [1, 2, 2]এবং [1, 2]তারপরে কেবল ব্যবহার করুন:

>>> set([1, 2, 2]).issubset([1, 2])
True

ছেদ করার পরে কি ছোট তালিকায় সমতা পরীক্ষা করা এটি করার দ্রুততম উপায়?

.issubsetএটি করার দ্রুততম উপায় হবে। পরীক্ষার আগে দৈর্ঘ্য পরীক্ষা করা issubsetগতির উন্নতি করবে না কারণ আপনার কাছে এখনও ও (এন + এম) আইটেমগুলি পুনরাবৃত্তি করতে হবে এবং চেক করতে হবে।


6

আরও একটি সমাধান হ'ল একটি ব্যবহার করা intersection

one = [1, 2, 3]
two = [9, 8, 5, 3, 2, 1]

set(one).intersection(set(two)) == set(one)

সেটগুলির ছেদটি অন্তর্ভুক্ত থাকবে set one

(বা)

one = [1, 2, 3]
two = [9, 8, 5, 3, 2, 1]

set(one) & (set(two)) == set(one)

2
one = [1, 2, 3]
two = [9, 8, 5, 3, 2, 1]

set(x in two for x in one) == set([True])

যদি তালিকা 1 তালিকায় থাকে 2:

  • (x in two for x in one)এর একটি তালিকা তৈরি করে True

  • যখন আমরা একটি করার একটি set(x in two for x in one)মাত্র উপাদান (সত্য) থাকে।


2

সেট থিওরি তালিকাগুলির জন্য অনুপযুক্ত কারণ ডুপ্লিকেটগুলি সেট থিওরি ব্যবহার করে ভুল উত্তর দেবে।

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

a = [1, 3, 3, 3, 5]
b = [1, 3, 3, 4, 5]
set(b) > set(a)

এর কোন অর্থ নেই। হ্যাঁ, এটি একটি ভুয়া উত্তর দেয় তবে সেট তত্ত্বটি কেবল তুলনা করে বলে এটি সঠিক নয়: 1,3,4 বনাম 1,3,4,5। আপনাকে অবশ্যই সমস্ত নকল অন্তর্ভুক্ত করতে হবে।

পরিবর্তে আপনাকে অবশ্যই প্রতিটি আইটেমের প্রতিটি উপস্থিতি গণনা করতে হবে এবং চেক এর সমান থেকে বড় করতে হবে। এটি খুব ব্যয়বহুল নয়, কারণ এটি O (N ^ 2) ক্রিয়াকলাপগুলি ব্যবহার করে না এবং দ্রুত বাছাইয়ের প্রয়োজন হয় না।

#!/usr/bin/env python

from collections import Counter

def containedInFirst(a, b):
  a_count = Counter(a)
  b_count = Counter(b)
  for key in b_count:
    if a_count.has_key(key) == False:
      return False
    if b_count[key] > a_count[key]:
      return False
  return True


a = [1, 3, 3, 3, 5]
b = [1, 3, 3, 4, 5]
print "b in a: ", containedInFirst(a, b)

a = [1, 3, 3, 3, 4, 4, 5]
b = [1, 3, 3, 4, 5]
print "b in a: ", containedInFirst(a, b)

তারপরে এটি চালিয়ে যাবেন:

$ python contained.py 
b in a:  False
b in a:  True

0

পার্টিতে দেরি হলে আমাকে ক্ষমা করুন। ;)

যদি এক পরীক্ষা করার জন্য set Aএর উপসেট set B, Pythonহয়েছে A.issubset(B)এবং A <= B। এটা তোলে উপর কাজ করে setকেবল কাজ করে মহান কিন্তু অভ্যন্তরীণ বাস্তবায়ন জটিলতা অজানা। তথ্যসূত্র: https://docs.python.org/2/library/sets.html#set-objects

আমি নীচের মন্তব্যে list Aএকটি উপসেট কিনা তা পরীক্ষা করতে একটি অ্যালগরিদম নিয়ে এসেছি list B

  • সাবসেটের সন্ধানের জটিলতা হ্রাস করতে, সাবসেটের sortজন্য যোগ্যতার সাথে উপাদানগুলির তুলনা করার আগে আমি উভয় তালিকার পক্ষে এটি উপযুক্ত মনে করি ।
  • এটা আমার কাছে সাহায্য করেছিল যখন দ্বিতীয় তালিকার উপাদান এর মান প্রথম তালিকার উপাদান এর মান চেয়ে বেশী ।breakloopB[j]A[i]
  • last_index_jশুরু করার জন্য ব্যবহার করা হয় loopবেশি list Bযেখানে গত শেষ করেছিলেন। এটি শুরু থেকে তুলনা শুরু করা এড়াতে সহায়তা করে list B( এটি পরবর্তীকালে list Bথেকে শুরু করার জন্য, যা আপনি অপ্রয়োজনীয় অনুমান করতে পারেন ))index 0iterations
  • O(n ln n)উভয় তালিকা বাছাই করার O(n)জন্য এবং সাবসেটের জন্য পরীক্ষার জন্য জটিলতা হবে ।
    O(n ln n) + O(n ln n) + O(n) = O(n ln n)

  • কোড প্রচুর আছে printকি প্রতিটি ঘটছে দেখতে বিবৃতি iterationএর loop। এগুলি কেবল বোঝার জন্য।

একটি তালিকা অন্য তালিকার উপসেট কিনা তা পরীক্ষা করে দেখুন

is_subset = True;

A = [9, 3, 11, 1, 7, 2];
B = [11, 4, 6, 2, 15, 1, 9, 8, 5, 3];

print(A, B);

# skip checking if list A has elements more than list B
if len(A) > len(B):
    is_subset = False;
else:
    # complexity of sorting using quicksort or merge sort: O(n ln n)
    # use best sorting algorithm available to minimize complexity
    A.sort();
    B.sort();

    print(A, B);

    # complexity: O(n^2)
    # for a in A:
    #   if a not in B:
    #       is_subset = False;
    #       break;

    # complexity: O(n)
    is_found = False;
    last_index_j = 0;

    for i in range(len(A)):
        for j in range(last_index_j, len(B)):
            is_found = False;

            print("i=" + str(i) + ", j=" + str(j) + ", " + str(A[i]) + "==" + str(B[j]) + "?");

            if B[j] <= A[i]:
                if A[i] == B[j]:
                    is_found = True;
                last_index_j = j;
            else:
                is_found = False;
                break;

            if is_found:
                print("Found: " + str(A[i]));
                last_index_j = last_index_j + 1;
                break;
            else:
                print("Not found: " + str(A[i]));

        if is_found == False:
            is_subset = False;
            break;

print("subset") if is_subset else print("not subset");

আউটপুট

[9, 3, 11, 1, 7, 2] [11, 4, 6, 2, 15, 1, 9, 8, 5, 3]
[1, 2, 3, 7, 9, 11] [1, 2, 3, 4, 5, 6, 8, 9, 11, 15]
i=0, j=0, 1==1?
Found: 1
i=1, j=1, 2==1?
Not found: 2
i=1, j=2, 2==2?
Found: 2
i=2, j=3, 3==3?
Found: 3
i=3, j=4, 7==4?
Not found: 7
i=3, j=5, 7==5?
Not found: 7
i=3, j=6, 7==6?
Not found: 7
i=3, j=7, 7==8?
not subset

আপনি যদি এগুলি বাছাই করেন তবে
সেটটির

0

কোডের নীচে প্রদত্ত সেটটি অন্য একটি সেটের "যথাযথ উপসেট" কিনা তা পরীক্ষা করে

 def is_proper_subset(set, superset):
     return all(x in superset for x in set) and len(set)<len(superset)

1
খালি সেটটি কেন প্রতিষ্ঠিত গাণিতিক নিয়ম ভাঙার জন্য আপনার আদর্শ? উইকিপিডিয়া: খালি সেট {}, দ্বারা oted দ্বারা চিহ্নিত, এটি যে কোনও সেট এক্সের একটি উপসেটও always
ইয়ান ভার্নিয়ার

ধন্যবাদ @ ইয়ানভিনিয়ারিয়ায় আমি সাবসেট এবং সুপারসেট উভয়ের জন্য খালি চেকগুলি অন্তর্ভুক্ত করতে সংশোধন করেছি যাতে উভয় শূন্য থাকলে এটি মিথ্যা ফিরে আসে।
লিও বেস্টিন

তবে কেন আপনি এই কাজ? এ এর বি এর উপসেট হওয়ার জন্য সহজভাবে এর অর্থ হ'ল এ-তে এমন কোনও আইটেম নেই যা বিতে নেই বা সমতুল্যভাবে, এ এর ​​সমস্ত আইটেম বি বিতেও রয়েছে খালি সেটটি তাই নিজেই সমস্ত সেটের একটি উপসেট । আপনার অতিরিক্ত চেকগুলি দৃsert়ভাবে দাবি করে যে এটি তা নয় এবং আপনি দৃ as়ভাবে জানান যে এটি কোনওভাবেই আদর্শ তবে এটি প্রতিষ্ঠিত পরিভাষার পরিপন্থী। সুবিধা কী?
ইয়ান ভার্নিয়ার

ধন্যবাদ @ ইয়ানভিনিয়ারিয়র এখন কোড পরীক্ষা করে একটি প্রদত্ত সেট অন্য একটি সেটের "যথাযথ উপসেট" কিনা তা পরীক্ষা করে।
লিও বেস্টিন

এটি সেটগুলির ব্যবহারের উপর নির্ভর করে উত্তরগুলির মতোই খারাপ । গাণিতিকভাবে বলতে গেলে, একটি সেট স্বতন্ত্র উপাদানগুলির একটি সংগ্রহ, একটি তালিকা অন্য তালিকার একটি অংশ কিনা তা পরীক্ষা করার সময় আমরা সেই ধারণার উপর নির্ভর করতে পারি এবং করা উচিত নয়। যদি প্রাথমিক তালিকায় সদৃশ থাকে তবে আপনার ফাংশনটি এখনও সত্যটি ফিরিয়ে আনতে পারে , এমনকি যদি প্রশ্নের মধ্যে থাকা উপাদানটি কেবলমাত্র দ্বিতীয় তালিকায় উপস্থিত থাকে। তালিকার তুলনা করার চেষ্টা করার সময় এটি সঠিক আচরণ বলে আমি মনে করি না।
inVader

0

অজগর 3.5 তে আপনি [*set()][index]উপাদানটি পেতে একটি করতে পারেন। এটি অন্যান্য পদ্ধতির তুলনায় অনেক ধীর সমাধান।

one = [1, 2, 3]
two = [9, 8, 5, 3, 2, 1]

result = set(x in two for x in one)

[*result][0] == True

বা ঠিক লেন এবং সেট দিয়ে

len(set(a+b)) == len(set(a))

0

এখানে আমি কীভাবে জানি যে যদি একটি তালিকা অন্য একটির উপসেট হয় তবে সিক্যুয়েন্সটি আমার ক্ষেত্রে আমার কাছে গুরুত্বপূর্ণ।

def is_subset(list_long,list_short):
    short_length = len(list_short)
    subset_list = []
    for i in range(len(list_long)-short_length+1):
        subset_list.append(list_long[i:i+short_length])
    if list_short in subset_list:
        return True
    else: return False

0

বেশিরভাগ সমাধান বিবেচনা করে যে তালিকার সদৃশ নেই। যদি আপনার তালিকাগুলিতে সদৃশ থাকে তবে আপনি এটি চেষ্টা করতে পারেন:

def isSubList(subList,mlist):
    uniqueElements=set(subList)
    for e in uniqueElements:
        if subList.count(e) > mlist.count(e):
            return False     
    # It is sublist
    return True

এটি নিশ্চিত করে যে সাবলিস্টের তালিকার তুলনায় কখনও কখনও আলাদা উপাদান বা সাধারণ উপাদানের বেশি পরিমাণ নেই।

lst=[1,2,2,3,4]
sl1=[2,2,3]
sl2=[2,2,2]
sl3=[2,5]

print(isSubList(sl1,lst)) # True
print(isSubList(sl2,lst)) # False
print(isSubList(sl3,lst)) # False

0

যেহেতু কেউই স্ট্রিংগুলির সাথে তুলনা করার বিষয়টি বিবেচনা করে না, তাই আমার প্রস্তাব এখানে।

আপনি অবশ্যই যাচাই করতে চাইতে পারেন পাইপ ("|") কোনও একটি তালিকার অংশ না এবং সম্ভবত স্বয়ংক্রিয়ভাবে অন্য একটি চর বেছে নিয়েছে, তবে আপনি ধারণাটি পেয়েছেন।

খালি স্ট্রিংকে বিভাজক হিসাবে ব্যবহার করা কোনও সমাধান নয় কারণ সংখ্যায় বেশ কয়েকটি অঙ্ক থাকতে পারে ([12,3]! = [1,23])

def issublist(l1,l2):
    return '|'.join([str(i) for i in l1]) in '|'.join([str(i) for i in l2])

-1

যদি আপনি জিজ্ঞাসা করছেন যে অন্য তালিকায় একটি তালিকা "অন্তর্ভুক্ত" রয়েছে তবে:

>>>if listA in listB: return True

আপনি যদি জিজ্ঞাসা করছেন যে তালিকার প্রতিটি উপাদানের তালিকার বিটিতে সমান সংখ্যক মিলের উপাদান রয়েছে কিনা:

all(True if listA.count(item) <= listB.count(item) else False for item in listA)

এটি আমার পক্ষে কাজ করে না। রিটার্নস মিথ্যা এমনকি যদি listA == listB
ক্যাস

@ ক্যাস আমি কেবল স্ট্রিং দিয়ে পরীক্ষা করেছি। আপনার মেশিন এ চেষ্টা করুন। পেস্টবিন.
com

আমি "বিলে তালিকার তালিকায় বি: যদি সত্য ফিরে আসি" অংশটি উল্লেখ করছিলাম, দ্বিতীয় অংশ নয়।
ক্যাশ

@ ক্যাস বিবেচনা করুন: ['এক', 'দুই'] ['এক', 'দুই'] টি ফল দেয়। ['এক', 'দুই'] ['এক', 'দুই', 'তিন'] মিথ্যা ফল দেয়। ['এক', 'দুই'] [['এক', 'দুই'], 'তিন'] টি সত্য ফলন করে। সুতরাং হ্যাঁ যদি listA == listB থাকে তবে listB এর তালিকাA সর্বদা মিথ্যা প্রত্যাবর্তন করবে কারণ তালিকাকে তালিকার তালিকার অন্তর্ভুক্ত একটি তালিকা উপাদান হতে হবে। সম্ভবত আপনি চিন্তা করা হয়: listB মানে listA "listB আইটেম হিসেবে তালিকাভুক্ত listA মধ্যে আইটেম নেই যে listB মধ্যে listA অর্থ নয়।
DevPlayer

@ ক্যাস আহ, আমি দেখি কীভাবে আমার পোস্ট গুলিয়ে ফেলছে। মূল পোস্টটি তালিকা তালিকার একটি উপসেট হওয়ায় তালিকার জন্য পরীক্ষা করতে বলেছে। প্রযুক্তিগতভাবে আমার পোস্টটি মূল পোস্টের প্রশ্নের ভিত্তিতে ভুল। এটি সঠিক হওয়ার জন্য প্রশ্নটি "আইটেম 2, আইটেম 2, লিস্টিএ, আইটেম 3, লিস্টএ,]]" এর তালিকাএর জন্য জিজ্ঞাসা করতে হবে। ['ডি', 'গ', 'সি', 'চ', 'এ', 'বি', 'এ'] "তে" "আই ',' বি ',' সি '] নয়।
দেবপ্লেয়ার

-2

যদি a2 is subset of a1, তবেLength of set(a1 + a2) == Length of set(a1)

a1 = [1, 2, 3, 4, 5]
a2 = [1, 2, 3]

len(set(a1)) == len(set(a1 + a2))
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.