একটি তালিকা থেকে একটি মান এর সমস্ত উপস্থিতি সরান?


377

পাইথনে remove()একটি তালিকার মানটির প্রথম উপস্থিতি সরিয়ে ফেলবে।

একটি তালিকা থেকে মানটির সমস্ত উপস্থিতি কীভাবে সরিয়ে নেওয়া যায়?

এটি আমার মনে আছে:

>>> remove_values_from_list([1, 2, 3, 4, 2, 2, 3], 2)
[1, 3, 4, 3]

উত্তর:


505

কার্যকরী পদ্ধতির:

পাইথন 3.x

>>> x = [1,2,3,2,2,2,3,4]
>>> list(filter((2).__ne__, x))
[1, 3, 3, 4]

অথবা

>>> x = [1,2,3,2,2,2,3,4]
>>> list(filter(lambda a: a != 2, x))
[1, 3, 3, 4]

পাইথন 2.x

>>> x = [1,2,3,2,2,2,3,4]
>>> filter(lambda a: a != 2, x)
[1, 3, 3, 4]

120
ফিল্টার + ল্যাম্বদা এর উপরে তালিকা বোঝার ব্যবহার করুন; প্রাক্তন সাধারণত আরও দক্ষ ছাড়াও আরও পঠনযোগ্য।
হাবনবিত

17
s / সাধারণভাবে / সাধারণত হচ্ছে /
হাবনবিত

99
: মত এই habnabit এর পরামর্শ সৌন্দর্য কোড[y for y in x if y != 2]
coredumperror

8
আমি এই সমাধানটিকে সেরা বলব না। কোডের মাধ্যমে স্কিমিং করার সময় তালিকা বোধগম্যতাগুলি দ্রুত এবং সহজে বোঝা যায়। এটি পাইথনের চেয়ে পার্ল পথের চেয়ে বেশি হবে।
পিটার নিমরুট

3
সরাসরি চালনার জন্য -1 __ne__। দুটি মানের তুলনা করা কেবল কল করা __eq__বা __ne__তার মধ্যে একটির চেয়ে অনেক জটিল প্রক্রিয়া । এটি এখানে সঠিকভাবে কাজ করতে পারে কারণ আপনি কেবল সংখ্যার তুলনা করছেন, তবে সাধারণ ক্ষেত্রে এটি ভুল এবং একটি বাগ।
অরণ-ফে

211

আপনি একটি তালিকা বোধগম্যতা ব্যবহার করতে পারেন:

def remove_values_from_list(the_list, val):
   return [value for value in the_list if value != val]

x = [1, 2, 3, 4, 2, 2, 3]
x = remove_values_from_list(x, 2)
print x
# [1, 3, 4, 3]

7
আপনি কীভাবে আইটেমগুলি পরীক্ষা না করে সরিয়ে ফেলবেন?
আলেকজান্ডার ল্যাংবার্গ

18
এটি মূল তালিকাটি পরিবর্তন করে না তবে একটি নতুন তালিকা দেয়।
জন ওয়াই

6
@ সেলিনাপ: না, এটি তালিকাটি কেবল একবার স্ক্যান করায় এটি অনুকূল। আপনার আসল কোডে inঅপারেটর এবং removeপদ্ধতি উভয়ই পুরো তালিকাকে স্ক্যান করে (তারা কোনও মিল খুঁজে না পাওয়া পর্যন্ত) যাতে আপনি সেই তালিকাটিকে একাধিকবার স্ক্যান করে শেষ করেন।
জন কুগেলম্যান

4
@ মোহাউক, @ জন ওয়াই: এক্স x এর পরিবর্তে কেবল এক্স [:] = ... ব্যবহার করুন এবং এটি 'এক্স' নামটি পুনরায় রিমান্ড না করার পরিবর্তে "ইন-প্লেস" হবে (গতি মূলত একই এবং এক্স এর চেয়ে অনেক বেশি দ্রুত .মরিভ হতে পারে !!!)।
অ্যালেক্স মার্তেলি

10
আমি এই পর্যন্ত ভোট কারণ পাইথন আমি 6 বছর পর এখনো Lambdas বুঝতে পারছি না :)
বেঞ্জামিন

107

আপনি যদি এখনও একটি দক্ষ তালিকা উপলব্ধি (বা জেনারেটর এক্সপ্রেশন) ব্যবহার করে মূল তালিকাটি পরিবর্তন করতে হয় তবে আপনি স্লাইস অ্যাসাইনমেন্টটি ব্যবহার করতে পারেন।

>>> x = [1, 2, 3, 4, 2, 2, 3]
>>> x[:] = (value for value in x if value != 2)
>>> x
[1, 3, 4, 3]

1
@ সেলিনাপ: ফিল্টার তালিকাটি পরিবর্তন করে না, এটি একটি নতুন তালিকা দেয়।
ইএম

ফিল্টার এবং তালিকা বোঝার একটি তালিকা পরিবর্তন করে না। টুকরো টুকরো টুকরো করা এবং মূল উদাহরণটি করে।
এ Coady

7
আমি এটি পছন্দ করি কারণ এটি x উল্লেখ করে যে তালিকাটি পরিবর্তন করে। সেই তালিকায় অন্য কোনও উল্লেখ থাকলে সেগুলিও প্রভাবিত হবে। এটি x = [ v for v in x if x != 2 ]প্রস্তাবগুলির বিপরীতে , যেগুলি একটি নতুন তালিকা তৈরি করে এবং এটি উল্লেখ করার জন্য এক্স পরিবর্তন করে, মূল তালিকাটি ছোঁয়া ছাড়বে।
হ্যানস

40

আরও বিমূর্ত পদ্ধতিতে প্রথম পোস্টটির সমাধানটি পুনরাবৃত্তি করা:

>>> x = [1, 2, 3, 4, 2, 2, 3]
>>> while 2 in x: x.remove(2)
>>> x
[1, 3, 4, 3]

19
এটি ও (এন * এন), যদিও।
হ্যানস

@ হ্যান্সগুলি ও (এন) হবে না যেহেতু এটি একবারে লুপটি দিয়ে যাচ্ছে এবং একই সাথে আইটেমটি সরিয়ে ফেলছে?
পেন্টা

1
বিবেচনা করুন x = [1] * 10000 + [2] * 1000। লুপ বডিটি 1000 বার কার্যকর করে এবং .remove () প্রতিবার এটি প্রয়োগ করার সময় 10000 উপাদান এড়িয়ে যেতে হয়। এটি আমার কাছে ও (এন * এন) এর মতো গন্ধযুক্ত তবে এটি কোনও প্রমাণ নয়। আমি মনে করি যে প্রমাণটি হ'ল তালিকার 2s সংখ্যাটি তার দৈর্ঘ্যের সাথে আনুপাতিক। সেই অনুপাতের ফ্যাক্টরটি তখন বিগ-ও স্বরলিপিটিতে অদৃশ্য হয়ে যায়। যদিও তালিকার কেবল ধ্রুবক 2s সংখ্যার মধ্যে সর্বোত্তম ক্ষেত্রে ও (এন ^ 2) নয়, কেবল ও (2 এন) যা ও (এন)।
হ্যানস

23

সহজ সমাধান দেখুন

>>> [i for i in x if i != 2]

এই সমস্ত উপাদান থাকার একটি তালিকা ফিরে আসবে xছাড়া2


11

উপরের সমস্ত উত্তর (মার্টিন অ্যান্ডারসন বাদে) মূল তালিকা থেকে আইটেমগুলি সরিয়ে না দিয়ে পছন্দসই আইটেমগুলি ছাড়াই একটি নতুন তালিকা তৈরি করে।

>>> import random, timeit
>>> a = list(range(5)) * 1000
>>> random.shuffle(a)

>>> b = a
>>> print(b is a)
True

>>> b = [x for x in b if x != 0]
>>> print(b is a)
False
>>> b.count(0)
0
>>> a.count(0)
1000

>>> b = a
>>> b = filter(lambda a: a != 2, x)
>>> print(b is a)
False

যদি আপনার চারপাশে ঝুলন্ত তালিকার অন্যান্য উল্লেখ থাকে তবে এটি গুরুত্বপূর্ণ হতে পারে।

তালিকায় স্থান পরিবর্তন করতে এই জাতীয় পদ্ধতি ব্যবহার করুন

>>> def removeall_inplace(x, l):
...     for _ in xrange(l.count(x)):
...         l.remove(x)
...
>>> removeall_inplace(0, b)
>>> b is a
True
>>> a.count(0)
0

যতদূর গতি সম্পর্কিত, আমার ল্যাপটপে ফলাফলগুলি রয়েছে (সবগুলি 5000 এন্ট্রি তালিকাতে 1000 এন্ট্রি সরানো আছে)

  • তালিকা উপলব্ধি - us 400us
  • ফিল্টার - 900 ডলার
  • .রেমো () লুপ - 50 মিমি

সুতরাং। রেমোভ লুপটি প্রায় 100x ধীর ........ হুম, সম্ভবত একটি ভিন্ন পদ্ধতির প্রয়োজন। আমি সবচেয়ে দ্রুত খুঁজে পেয়েছি তালিকাটি বোঝার ব্যবহার করে তবে তারপরে মূল তালিকার বিষয়বস্তুগুলি প্রতিস্থাপন করুন the

>>> def removeall_replace(x, l):
....    t = [y for y in l if y != x]
....    del l[:]
....    l.extend(t)
  • মুছে ফেলা_প্লেস () - 450us

তখন কেন পুরানো ঠিকানার অধীনে নতুন তালিকাটিকে পুনরায় সাইন করবেন না? def remove_all(x, l): return [y for y in l if y != x]তারপরেl = remove_all(3,l)
ড্যানিড

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

আহ ঠিক. আমি কোনও পদ্ধতি সংজ্ঞায়িত করতে এতটা আকস্মিক হয়েছি, আপনি ইতিমধ্যে যে সাধারণ কার্যভারটি করেছেন তা আমি উপেক্ষা করেছি।
ড্যানিড

7

তুমি এটি করতে পারো

while 2 in x:   
    x.remove(2)

3
এটি একটি খারাপ সমাধান, যেহেতু 2 টি এন এর
ইভেন্টের

আপনি যে তালিকাটি অনুসরণ করছেন সেটিকে যোগ করা বা অপসারণ করার পরামর্শ দেওয়া হয় না। খারাপ অনুশীলন আইএমএইচও।
আমান মাথুর

5

পঠনযোগ্যতার ব্যয়ে, আমি মনে করি এই সংস্করণটি কিছুটা দ্রুততর হয়েছে কারণ এটি তালিকাটিকে পুনরায় পরীক্ষা করতে বাধ্য করে না, সুতরাং ঠিক একই কাজটি মুছে ফেললে যেভাবেই করতে হবে:

x = [1, 2, 3, 4, 2, 2, 3]
def remove_values_from_list(the_list, val):
    for i in range(the_list.count(val)):
        the_list.remove(val)

remove_values_from_list(x, 2)

print(x)

আপনি আপনার কোডটিতে প্রদর্শিত তালিকার জন্য, আমার পরিমাপ অনুসারে এই পদ্ধতির তালিকা বোধগমনের পদ্ধতিটির (যা একটি অনুলিপি ফেরায়) তুলনায় প্রায় 36% ধীর।
djsmith

ভাল আপনি খেয়াল করেছেন। তবে, যেহেতু আমি মনে করি এটি আপনার সিদ্ধান্তকে পিছলে যেতে পারে, তাই আমি প্রশ্নাবলীর প্রথম প্রস্তাবের সাথে আমার সংস্করণটি তুলনা করছি।
মার্টিন অ্যান্ডারসন

4

1.000.000 উপাদান সহ একটি তালিকা / অ্যারের বিরুদ্ধে নম্পী পদ্ধতির এবং সময়গুলি:

সময়:

In [10]: a.shape
Out[10]: (1000000,)

In [13]: len(lst)
Out[13]: 1000000

In [18]: %timeit a[a != 2]
100 loops, best of 3: 2.94 ms per loop

In [19]: %timeit [x for x in lst if x != 2]
10 loops, best of 3: 79.7 ms per loop

উপসংহার: তালিকা বোঝার পদ্ধতির তুলনায় নম্পি 27 গুণ (আমার নোটবুকটিতে) দ্রুত)

পিএস যদি আপনি আপনার নিয়মিত পাইথন তালিকাকে lstনমপি অ্যারে রূপান্তর করতে চান :

arr = np.array(lst)

সেটআপ:

import numpy as np
a = np.random.randint(0, 1000, 10**6)

In [10]: a.shape
Out[10]: (1000000,)

In [12]: lst = a.tolist()

In [13]: len(lst)
Out[13]: 1000000

পরীক্ষা করে দেখুন:

In [14]: a[a != 2].shape
Out[14]: (998949,)

In [15]: len([x for x in lst if x != 2])
Out[15]: 998949

4
a = [1, 2, 2, 3, 1]
to_remove = 1
a = [i for i in a if i != to_remove]
print(a)

সম্ভবত সবচেয়ে পাইথোনিক না তবে এখনও আমার পক্ষে সবচেয়ে সহজ হা হা


3

সমস্ত সদৃশ ঘটনাগুলি সরাতে এবং তালিকায় একটি রেখে দিন:

test = [1, 1, 2, 3]

newlist = list(set(test))

print newlist

[1, 2, 3]

আমি প্রকল্প ইউলারের জন্য যে ফাংশনটি ব্যবহার করেছি তা এখানে:

def removeOccurrences(e):
  return list(set(e))

2
আমার 250k মান সহ একটি ভেক্টরে এটি করা দরকার এবং এটি একটি কবজির মতো কাজ করে।
আরএসভিউইব

1
উত্তরটি হল হ্যাঁ! এবং আমি সম্পূর্ণরূপে বুঝতে পারি যে কোনও ভেক্টর থাকলে কোনও দীর্ঘস্থায়ী কোনও প্রোগ্রামারকে সম্পূর্ণ উন্মাদ বলে মনে হয় sounds আমি গণিতবিদ হিসাবে সমস্যার সমাধান করছি, সমাধানগুলি অনুকূলকরণের বিষয়ে উদ্বিগ্ন নই এবং এটি সমতার চেয়ে দীর্ঘতর সমস্যার সমাধানের দিকে নিয়ে যেতে পারে। (যদিও 5 মিনিটের বেশি সমাধানের জন্য আমার ধৈর্য নেই don't)
আরএসভিউইব

6
এটি তালিকা থেকে কোনও ক্রম সরিয়ে ফেলবে।
asmeurer

4
@ জ্যারেডবুরো সম্ভবত কারণ এটি বর্তমানে যেমন দাঁড়িয়েছে তেমন প্রশ্নের উত্তর দেয় না, তবে একেবারে অন্যরকম প্রশ্ন।
ড্রিভিকো

6
-1, এটি ওপি-র প্রশ্নের উত্তর নয়। এটি নকল মুছে ফেলার একটি সমাধান যা সম্পূর্ণ ভিন্ন বিষয়।
অ্যানয়েজ

2

আমি বিশ্বাস করি এটি সম্ভবত অন্য যে কোনও উপায়ে দ্রুত হয় যদি আপনি তালিকাগুলির ক্রমটির বিষয়ে চিন্তা না করেন, আপনি যদি চূড়ান্ত অর্ডারটি সূচকগুলি মূল এবং এর মাধ্যমে রিসর্ট থেকে সঞ্চয় করে থাকেন।

category_ids.sort()
ones_last_index = category_ids.count('1')
del category_ids[0:ones_last_index]

2
আপনি কোথায় যাচ্ছেন তা আমি বুঝতে পেরেছি, তবে এই কোডটি কার্যকর হবে না কারণ আপনার কেবল
সূচি সূচকটিও

2
for i in range(a.count(' ')):
    a.remove(' ')

আমি অনেক সহজ বিশ্বাস করি।


2
আপনার উত্তরটি সম্পাদনা করুন যাতে স্পষ্টতা উন্নত হয়। আপনার প্রস্তাবিত কোডটি ঠিক কী করে, কেন এটি কাজ করে এবং কেন এটি আপনার প্রস্তাবনা তা দয়া করে পরিষ্কার করে দিন। দয়া করে আপনার প্রশ্নটিকে সঠিকভাবে ফর্ম্যাট করুন যাতে আপনার বাকী উত্তর থেকে কোডটি পরিষ্কারভাবে স্পষ্ট হয়।
অর্টান্ড

2

দিন

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

ইতোমধ্যে পোস্ট করার মতো সহজ এবং দক্ষ সমাধান

>>> x[:] = [v for v in x if v != 2]
>>> x
[1, 3, 4, 3]

আরেকটি সম্ভাবনা যা কম স্মৃতি ব্যবহার করতে হবে তবে ধীর হওয়া উচিত

>>> for i in range(len(x) - 1, -1, -1):
        if x[i] == 2:
            x.pop(i)  # takes time ~ len(x) - i
>>> x
[1, 3, 4, 3]

10% মেলানো এন্ট্রি সহ 1000 এবং 100000 দৈর্ঘ্যের তালিকার সময়সীমার ফলাফল: 0.16 বনাম 0.25 এমএস, এবং 23 বনাম 123 এমএস।

দৈর্ঘ্য 1000 সহ

দৈর্ঘ্য 100000 সঙ্গে সময়


1

পাইথন তালিকা থেকে একটি মানের সমস্ত ঘটনা সরিয়ে ফেলুন

lists = [6.9,7,8.9,3,5,4.9,1,2.9,7,9,12.9,10.9,11,7]
def remove_values_from_list():
    for list in lists:
      if(list!=7):
         print(list)
remove_values_from_list()

ফলাফল: 6.9 8.9 3 5 4.9 1 2.9 9 12.9 10.9 11

অন্যথা,

lists = [6.9,7,8.9,3,5,4.9,1,2.9,7,9,12.9,10.9,11,7]
def remove_values_from_list(remove):
    for list in lists:
      if(list!=remove):
        print(list)
remove_values_from_list(7)

ফলাফল: 6.9 8.9 3 5 4.9 1 2.9 9 12.9 10.9 11


"পাইথন 100% নির্ভুলতার সাথে কাজ করে এমন ফাংশনটির মধ্যে প্রতিটি লুপ 'লুপ করে!'
রফিকুল 786

আপনি কেবল তালিকাটি মুদ্রণ করে তালিকাটি পরিবর্তন করেন না। এছাড়াও তালিকা হিসাবে একটি তালিকা নামকরণ বিভ্রান্তিকর
কন Psych

0

যদি আপনি অন্তর্নির্মিত না থাকেন filterবা অতিরিক্ত স্থান ব্যবহার করতে না চান এবং আপনার একটি রৈখিক সমাধান প্রয়োজন ...

def remove_all(A, v):
    k = 0
    n = len(A)
    for i in range(n):
        if A[i] !=  v:
            A[k] = A[i]
            k += 1

    A = A[:k]

0
hello =  ['h', 'e', 'l', 'l', 'o', ' ', 'w', 'o', 'r', 'l', 'd']
#chech every item for a match
for item in range(len(hello)-1):
     if hello[item] == ' ': 
#if there is a match, rebuild the list with the list before the item + the list after the item
         hello = hello[:item] + hello [item + 1:]
print hello

['ওহে বিশ্ব']


দয়া করে আপনার উত্তরটি ব্যাখ্যা সহ বিস্তারিতভাবে বলার চেষ্টা করুন।
পার্লাদ

0

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

for i in range(len(spam)):
    spam.remove('cat')
    if 'cat' not in spam:
         print('All instances of ' + 'cat ' + 'have been removed')
         break

0

আমরা ইন-জায়গা সব ব্যবহার হয় অপসারণ করতে পারি না delবা pop:

import random

def remove_values_from_list(lst, target):
    if type(lst) != list:
        return lst

    i = 0
    while i < len(lst):
        if lst[i] == target:
            lst.pop(i)  # length decreased by 1 already
        else:
            i += 1

    return lst

remove_values_from_list(None, 2)
remove_values_from_list([], 2)
remove_values_from_list([1, 2, 3, 4, 2, 2, 3], 2)
lst = remove_values_from_list([random.randrange(0, 10) for x in range(1000000)], 2)
print(len(lst))

দক্ষতার জন্য এখন:

In [21]: %timeit -n1 -r1 x = random.randrange(0,10)
1 loop, best of 1: 43.5 us per loop

In [22]: %timeit -n1 -r1 lst = [random.randrange(0, 10) for x in range(1000000)]
g1 loop, best of 1: 660 ms per loop

In [23]: %timeit -n1 -r1 lst = remove_values_from_list([random.randrange(0, 10) for x in range(1000000)]
    ...: , random.randrange(0,10))
1 loop, best of 1: 11.5 s per loop

In [27]: %timeit -n1 -r1 x = random.randrange(0,10); lst = [a for a in [random.randrange(0, 10) for x in
    ...:  range(1000000)] if x != a]
1 loop, best of 1: 710 ms per loop

যেমনটি আমরা দেখতে পাই যে স্থানটিতে সংস্করণে remove_values_from_list()কোনও অতিরিক্ত মেমরির প্রয়োজন হয় না, তবে এটি চালাতে আরও অনেক বেশি সময় লাগে:

  • ইনপ্লেস মানগুলি সরানোর জন্য 11 সেকেন্ড
  • তালিকা বোধগম্যতার জন্য 710 মিলি সেকেন্ড , যা মেমরিতে নতুন তালিকা বরাদ্দ করে

0

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

সময়ের জটিলতা: ও (এন)
অতিরিক্ত স্থান জটিলতা: ও (1)

def main():
    test_case([1, 2, 3, 4, 2, 2, 3], 2)     # [1, 3, 3, 4]
    test_case([3, 3, 3], 3)                 # []
    test_case([1, 1, 1], 3)                 # [1, 1, 1]


def test_case(test_val, remove_val):
    remove_element_in_place(test_val, remove_val)
    print(test_val)


def remove_element_in_place(my_list, remove_value):
    length_my_list = len(my_list)
    swap_idx = length_my_list - 1

    for idx in range(length_my_list - 1, -1, -1):
        if my_list[idx] == remove_value:
            my_list[idx], my_list[swap_idx] = my_list[swap_idx], my_list[idx]
            swap_idx -= 1

    for pop_idx in range(length_my_list - swap_idx - 1):
        my_list.pop() # O(1) operation


if __name__ == '__main__':
    main()

-1

গতি সম্পর্কে!

import time
s_time = time.time()

print 'start'
a = range(100000000)
del a[:]
print 'finished in %0.2f' % (time.time() - s_time)
# start
# finished in 3.25

s_time = time.time()
print 'start'
a = range(100000000)
a = []
print 'finished in %0.2f' % (time.time() - s_time)
# start
# finished in 2.11

-3
p=[2,3,4,4,4]
p.clear()
print(p)
[]

কেবল পাইথন 3 দিয়ে


2
হাসিখুশিভাবে, এটি জিজ্ঞাসিত প্রশ্নের ক্ষেত্রের মধ্যে এবং সঠিক।
এরিক

আমি জানি না কিভাবে এটি সঠিক। এটি তালিকা থেকে সমস্ত আইটেম সরিয়ে ফেলবে , কোনও মানের সমস্ত ঘটনা নয় ।
জর্জি

-3

কি সমস্যা:

Motor=['1','2','2']
For i in Motor:
       If i  != '2':
       Print(i)
Print(motor)

অ্যানাকোন্ডা ব্যবহার করা হচ্ছে


2
দয়া করে আপনার কোডের লাইনগুলি ব্যাখ্যা করুন যাতে অন্যান্য ব্যবহারকারীরা এর কার্যকারিতা বুঝতে পারে। ধন্যবাদ!
Ignacio আরা

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