Yanıtlar:
new_list = [x+1 for x in my_list]
lst = [1, 2, 3]; e = lst[0]; e += 1
. e
nereden geldiği hakkında herhangi bir bilgi içermez, sadece bir listenin bir elemanının atandığı bir değişkendir. Ona başka bir şey atadıktan sonra liste lst
değişmeyecektir.
new_list = (x+1 for x in my_list)
>>> mylist = [1,2,3]
>>> [x+1 for x in mylist]
[2, 3, 4]
>>>
Listeyi anlama konusundaki diğer cevaplar muhtemelen basit toplama için en iyi bahistir, ancak tüm öğelere uygulamanız gereken daha karmaşık bir işleve sahipseniz, harita iyi bir uyum olabilir.
Örneğinizde şöyle olacaktır:
>>> map(lambda x:x+1, [1,2,3])
[2,3,4]
map(1 .__add__, ...)
çok çalışıyor. Not arasına boşluk gerektiğini 1
ve .
bunun bir şamandıra olduğu ayrıştırıcı düşünme önlemek için
Düzenleme: bu yerinde değil
Öncelikle değişkeniniz için 'liste' kelimesini kullanmayın. Anahtar kelimeyi gölgelerlist
.
En iyi yol, bunu splicing kullanarak yerinde yapmaktır [:]
, bir splice işaretine dikkat edin :
>>> _list=[1,2,3]
>>> _list[:]=[i+1 for i in _list]
>>> _list
[2, 3, 4]
_list[:]=(i+1 for i in _list)
,.
_list[:]=(i+1 for i in _list)
yeni bir liste yarattığını düşünüyorsunuz ?
>>> [x.__add__(1) for x in [1, 3, 5]]
3: [2, 4, 6]
Buradaki amacım, listedeki öğenin çeşitli yerleşik işlevleri desteklediği bir tam sayı olup olmadığını ortaya çıkarmaktır.
Python 2+:
>>> mylist = [1,2,3]
>>> map(lambda x: x + 1, mylist)
[2, 3, 4]
Python 3+:
>>> mylist = [1,2,3]
>>> list(map(lambda x: x + 1, mylist))
[2, 3, 4]
Bunu yapmanın o kadar verimli değil, benzersiz bir yoluyla karşılaştı. Yani bunu paylaşıyor ve evet başka bir liste için fazladan alan gerektiriyor.
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]
from operator import add
Yukarıdaki cevapların çoğu çok iyi. İşi yapacak bazı garip cevaplar da gördüm. Ayrıca, görülen son cevap normal bir döngüdeydi. Bu cevap verme istekliliği beni götürüyor itertools
venumpy
farklı bir şekilde aynı işi yapacak olan.
Burada işi yapmak için yukarıda cevaplanmamış farklı yollar sunuyorum.
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)
Çıktı
>>> <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)
Benim tek kullanımını vurgulamak için bir neden numpy
çok büyük diziler için verimli performans, çünkü hep Numpy gibi kütüphaneler ile böyle yönlendirmeleri yapmak gerektiğidir.