किसी सूची में प्रत्येक तत्व में पूर्णांक कैसे जोड़ें?


135

यदि मेरे पास है list=[1,2,3]और मैं 1आउटपुट प्राप्त करने के लिए प्रत्येक तत्व को जोड़ना चाहता हूं [2,3,4], तो मैं यह कैसे करूंगा?

मुझे लगता है कि मैं एक लूप के लिए उपयोग करूँगा, लेकिन निश्चित रूप से नहीं कि कैसे।

जवाबों:


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

6
यह बात इसे स्पष्ट करती है: पायथन नेम्स एंड वैल्यूज़ के बारे में तथ्य और मिथक: nedbatchelder.com/text/names1.html
नेड

√ बहुत बढ़िया जानकारी। आँख खोलना।
डैनियल स्प्रिंगर

3
@DaniSpringer क्योंकि आप किसी सूची को असाइन नहीं कर रहे हैं। यह करने जैसा ही है lst = [1, 2, 3]; e = lst[0]; e += 1eयह कहां से आया है, इसके बारे में कोई जानकारी नहीं है, यह सिर्फ एक चर है जिसके लिए एक सूची का एक तत्व सौंपा गया है। इसे कुछ और बताने के बाद, सूची lstनहीं बदलेगी।
बलोएज माइकेल

वैसे यह जवाब मुझे बहुत अच्छा लगता है।
डेनियल स्प्रिंगर

और संवाददाता आलसी ने एक गणना की: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)
एलन

यह अभी भी एक नई सूची बनाता है, यह संभव नहीं है कि मैं एक लूप के बिना इसे शुरू कर दूं
रॉबर्ट किंग

आपको क्या लगता _list[:]=(i+1 for i in _list)है कि नई सूची क्यों बनाई गई है?
एलन

मेरा मतलब है, यह जगह में है, लेकिन अस्थायी रूप से यह आरएचएस के लिए एक पूरी नई सूची बनाएगा। इन उत्तरों को देखें: stackoverflow.com/questions/4948293/… stackoverflow.com/questions/11877212/…
रोबर्ट राजा

मुझे पता है तुम्हारा क्या मतलब है। अस्थायी अनुक्रम को कॉल करके एक सूची ने मुझे भ्रमित कर दिया। क्या हम वास्तव में इसके प्रकार के बारे में कुछ जानते हैं? क्या यह विशिष्ट नहीं होगा?
एलन

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

इतना कुशल नहीं है, लेकिन यह करने का अनूठा तरीका है। इसलिए इसे साझा करना। और हाँ इसके लिए एक और सूची के लिए अतिरिक्त स्थान की आवश्यकता होती है।

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]

"जोड़" कहाँ से आता है?
19

ऑपरेटरों से आयात जोड़ना चाहिए,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है कि किसी को हमेशा पुस्तकालयों के साथ इस तरह के जोड़-तोड़ करना चाहिए जैसे कि खसखस ​​के साथ क्योंकि यह बहुत ही महत्वपूर्ण सरणियों के लिए प्रदर्शन कुशल है।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.