কিভাবে তালিকার প্রতিটি উপাদান একটি পূর্ণসংখ্যা যোগ করতে?


135

যদি আমার কাছে থাকে list=[1,2,3]এবং আমি 1আউটপুট পেতে প্রতিটি উপাদান যুক্ত করতে চাই [2,3,4], আমি কীভাবে এটি করব?

আমি ধরে নিয়েছি আমি লুপের জন্য একটি ব্যবহার করব তবে ঠিক কীভাবে তা নিশ্চিত নয়।

উত্তর:


157
new_list = [x+1 for x in my_list]


। দুর্দান্ত তথ্য। চোখ খোলা।
ড্যানিয়েল স্প্রিংগার

3
@ ডানিস্প্রিঞ্জার কারণ আপনি একটি তালিকাতে বরাদ্দ দিচ্ছেন না। এটা করা একই lst = [1, 2, 3]; e = lst[0]; e += 1eএটি কোথা থেকে এসেছে সে সম্পর্কে কোনও তথ্য নেই, এটি কেবলমাত্র একটি পরিবর্তনশীল যা একটি তালিকার একটি উপাদানকে নির্ধারিত করা হয়েছে। এটিতে অন্য কিছু নির্ধারণের পরে, তালিকাটি lstপরিবর্তন হবে না।
Bżażej মিচালিক

ভাল এই উত্তরটি আমার সাথে খুব মিল দেখাচ্ছে।
ড্যানিয়েল স্প্রঞ্জার

এবং সংবাদদাতা অলস গণনা করা একটি:new_list = (x+1 for x in my_list)
এডুয়ার্ডো পিগনেটেলি


24

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

আপনার উদাহরণে এটি হবে:

>>> map(lambda x:x+1, [1,2,3])
[2,3,4]

7
map(1 .__add__, ...)খুব কাজ করে। নোট করুন যে পার্সারটিকে এটি একটি ভাসমান ভেবে রোধ করতে 1এবং এর মধ্যে আপনার একটি স্থান দরকার.
জন লা রুই

15

আপনি যদি নিম্পি ব্যবহার করতে চান তবে নীচে আরও একটি পদ্ধতি রয়েছে

import numpy as np
list1 = [1,2,3]
list1 = list(np.asarray(list1) + 1)

13

সম্পাদনা করুন: এটি কোনও জায়গায় নেই

প্রথমে আপনার পরিবর্তনশীলটির জন্য 'তালিকা' শব্দটি ব্যবহার করবেন না। এটি কীওয়ার্ডের ছায়া দেয় list

স্প্লাইসিং ব্যবহার করে এটি করার সর্বোত্তম উপায় হ'ল [:]একটি বিভক্তিকে চিহ্নিত করুন:

>>> _list=[1,2,3]
>>> _list[:]=[i+1 for i in _list]
>>> _list
[2, 3, 4]

4
এটি বিদ্যমান তালিকা পরিবর্তন করার জন্য ভাল তবে এটি এখনও একটি নতুন তালিকা তৈরি করে। অপরিবর্তিত তালিকা তৈরির বিষয়টি এড়াতে কোনও জেনারেটর ব্যবহার করা কি কোনওরকম অনিরাপদ? অর্থাৎ _list[:]=(i+1 for i in _list),।
অ্যালান

এটি এখনও একটি নতুন তালিকা তৈরি করে, লুপ ছাড়া এটি এটি জায়গায় করা সম্ভব নয় বলে আমি মনে করি না
রবার্ট কিং 16:36

আপনি কেন মনে করেন _list[:]=(i+1 for i in _list)একটি নতুন তালিকা তৈরি করে?
অ্যালান

আমি বলতে চাইছি এটি স্থানে রয়েছে তবে অস্থায়ীভাবে এটি আরএইচএসের জন্য সম্পূর্ণ নতুন তালিকা তৈরি করবে। এই উত্তরগুলি দেখুন: স্ট্যাকওভারফ্লো / প্রশ্নগুলি / 4948293 /… স্ট্যাকওভারফ্লো. com
রবার্ট কিং

আমি বুঝছি তুমি কি বলতে চাও. অস্থায়ী ক্রমানুসারে একটি তালিকা কল করে আমাকে বিভ্রান্ত করেছে। আমরা আসলে এর ধরণ সম্পর্কে কিছু জানি? তা কি বাস্তবায়ন নির্দিষ্ট হবে না?
অ্যালান

9
>>> [x.__add__(1) for x in [1, 3, 5]]
3: [2, 4, 6]

তালিকার আইটেমটি একটি পূর্ণসংখ্যা হলে এটি বিভিন্ন অন্তর্নির্মিত ফাংশন সমর্থন করে কিনা তা প্রকাশ করার জন্য আমার উদ্দেশ্য এখানে।


7

পাইথন 2+:

>>> mylist = [1,2,3]
>>> map(lambda x: x + 1, mylist)
[2, 3, 4]

পাইথন 3+:

>>> mylist = [1,2,3]
>>> list(map(lambda x: x + 1, mylist))
[2, 3, 4]


2

এটি করার মতো কোনও দক্ষ না হলেও অনন্য পদ্ধতিতে এসে পৌঁছে। সুতরাং এটি জুড়ে ভাগ করে নিন nd এবং হ্যাঁ এটির অন্য তালিকার জন্য অতিরিক্ত স্থান প্রয়োজন।

from operator import add
test_list1 = [4, 5, 6, 2, 10]
test_list2 = [1] * len(test_list1)

res_list = list(map(add, test_list1, test_list2))

print(test_list1)
print(test_list2)
print(res_list)

#### Output ####
[4, 5, 6, 2, 10]
[1, 1, 1, 1, 1]
[5, 6, 7, 3, 11]

"যোগ" কোথা থেকে আসে?
hahnec

অপারেটরদের থেকে আমদানি করা উচিত,from operator import add
রাজিথ থেনাকুন


0

উপরের উত্তরগুলির অনেকগুলি খুব ভাল। আমি কিছু অদ্ভুত উত্তরও দেখেছি যা কাজটি করবে। এছাড়াও, দেখা শেষ উত্তরটি ছিল একটি সাধারণ লুপের মাধ্যমে। উত্তর দেওয়ার ক্ষেত্রে এই ইচ্ছুকতাই আমাকে দিকে নিয়ে যায় itertoolsএবং numpyযা একই কাজটি অন্যভাবে করবে।

এখানে আমি কাজটি করার বিভিন্ন উপায় উপস্থাপন করেছি, উপরে উত্তর দেওয়া হয়নি।

import operator
import itertools

x = [3, 5, 6, 7]

integer = 89

"""
Want more vairaint can also use zip_longest from itertools instead just zip
"""
#lazy eval
a = itertools.starmap(operator.add, zip(x, [89] * len(x))) # this is not subscriptable but iterable
print(a)
for i in a:
  print(i, end = ",")


# prepared list
a = list(itertools.starmap(operator.add, zip(x, [89] * len(x)))) # this returns list
print(a)



# With numpy (before this, install numpy if not present with `pip install numpy`)
import numpy

res = numpy.ones(len(x), dtype=int) * integer + x # it returns numpy array
res = numpy.array(x) + integer # you can also use this, infact there are many ways to play around
print(res)
print(res.shape) # prints structure of array, i.e. shape

# if you specifically want a list, then use tolist

res_list = res.tolist()
print(res_list)

আউটপুট

>>> <itertools.starmap object at 0x0000028793490AF0> # output by lazy val
>>> 92,94,95,96,                                     # output of iterating above starmap object
>>> [92, 94, 95, 96]                                 # output obtained by casting to list
>>>                   __
>>> # |\ | |  | |\/| |__| \ /
>>> # | \| |__| |  | |     |
>>> [92 94 95 96]                                    # this is numpy.ndarray object
>>> (4,)                                             # shape of array
>>> [92, 94, 95, 96]                                 # this is a list object (doesn't have a shape)

আমার ব্যবহারটি হাইলাইট করার একমাত্র কারণ numpyহ'ল ন্যাপির মতো লাইব্রেরিগুলির সাথে সর্বদা এমন ম্যানিপুলেশন করা উচিত কারণ এটি খুব বড় অ্যারেগুলির জন্য পারফরম্যান্স দক্ষ।

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