2014-10-19 15 views
17

Xin chào vì vậy tôi muốn nhân các số nguyên bên trong một danh sách.Làm thế nào để nhân tất cả các số nguyên trong danh sách

Ví dụ;

l = [1, 2, 3] 
l = [1*2, 2*2, 3*2] 

đầu ra:

l = [2, 4, 6] 

Vì vậy, tôi đã tìm kiếm trên mạng và hầu hết các câu trả lời được về nhân tất cả các số nguyên với nhau như khác:

[1 * 2 * 3]

+0

Đi trên thiết bị đầu cuối Python và gõ 'help (map)'. – Mephy

Trả lời

40

Hãy thử một list comprehension:

l = [x * 2 for x in l] 

Điều này đi qua l, nhân mỗi phần tử cho hai.

Tất nhiên, có nhiều cách để thực hiện. Nếu bạn đang vào lambda functionsmap, bạn thậm chí có thể làm

l = map(lambda x: x * 2, l) 

để áp dụng các chức năng lambda x: x * 2 cho mỗi phần tử trong l. Đây là tương đương với:

def timesTwo(x): 
    return x * 2 

l = map(timesTwo, l) 
+0

ahh tôi thấy nó thực hiện một vòng lặp. Có cách nào trực tiếp hơn vòng lặp không? (i dont biết nếu có ý nghĩa: p) – Andre

+1

@Ali: Mặc dù một danh sách hiểu sử dụng một vòng lặp nó là một loại rất hiệu quả của vòng lặp, do đó, một danh sách hiểu nói chung là nhanh hơn nhiều so với sử dụng một vòng lặp 'for' rõ ràng. –

8

Cách pythonic nhất sẽ được sử dụng một danh sách hiểu:

l = [2*x for x in l] 

Nếu bạn cần phải làm điều này cho một số lượng lớn các số nguyên, sử dụng numpy mảng:

l = numpy.array(l, dtype=int)*2 

Một lựa chọn cuối cùng là sử dụng bản đồ

l = list(map(lambda x:2*x, l)) 
.210
3

Một cách tiếp cận chức năng đó là có thể là một chút dễ dàng hơn để nhìn vào hơn một chức năng ẩn danh nếu bạn đi con đường đó đang sử dụng functools.partial sử dụng hai tham số operator.mul với một bội số cố định

>>> from functools import partial 
>>> from operator import mul 
>>> double = partial(mul, 2) 
>>> list(map(double, [1, 2, 3])) 
[2, 4, 6] 
2

Cách đơn giản nhất để tôi là:

map((2).__mul__, [1, 2, 3]) 
1
#multiplying each element in the list and adding it into an empty list 
original = [1, 2, 3] 
results = [] 
for num in original: 
    results.append(num*2)# multiply each iterative number by 2 and add it to the empty list. 

print(results) 
+1

@MirzaSisic về cơ bản có rất nhiều cách để giải quyết vấn đề trên. tôi đã chọn để tạo một danh sách trống (results = []) vì vậy sau mỗi lần lặp tôi có thể thêm (nối thêm) số lặp lại nhân với 2 vào danh sách trống. và cuối cùng in ra danh sách trống có chứa các số lặp nhân với 2. nếu bạn vẫn không nhận được nó xin vui lòng trỏ đến chi tiết cụ thể để tôi có thể giúp bạn. cảm ơn –

+1

@salparadise gợi ý cho sự thay đổi về tên biến. –

0

sử dụng numPy:

In [1]: import numpy as np 

    In [2]: nums = np.array([1,2,3])*2 

    In [3]: nums.tolist() 
    Out[4]: [2, 4, 6] 
Các vấn đề liên quan