Hướng dẫn how to mutate a list in python - làm thế nào để thay đổi một danh sách trong python

11

Mới! Lưu câu hỏi hoặc câu trả lời và sắp xếp nội dung yêu thích của bạn. Tìm hiểu thêm.
Learn more.

Đây là mã giả mà tôi đã viết mô tả vấn đề của tôi:-

func(s):
   #returns a value of s

x = a list of strings
print func(x)
print x #these two should give the SAME output

Khi tôi in giá trị của X cuối cùng, tôi muốn nó trở thành một cái được trả lại bởi func (x). Tôi có thể làm điều gì đó như thế này chỉ bằng cách chỉnh sửa chức năng (và không cài đặt

func(s):
   s[:] = whatever after mutating
   return s

x = a list of strings
print func(x)
print x
2)

Hướng dẫn how to mutate a list in python - làm thế nào để thay đổi một danh sách trong python

Hỏi ngày 11 tháng 7 năm 2015 lúc 17:06Jul 11, 2015 at 17:06

2

func(s):
   s[:] = whatever after mutating
   return s

x = a list of strings
print func(x)
print x

Bạn thực sự không cần phải trả lại bất cứ điều gì:

def func(s):
    s[:] = [1,2,3]

x = [1,2]
print func(x)
print x # -> [1,2,3]

Tất cả phụ thuộc vào những gì bạn thực sự đang làm, việc thêm hoặc bất kỳ đột biến trực tiếp nào của danh sách sẽ được phản ánh bên ngoài chức năng khi bạn thực sự thay đổi đối tượng/danh sách ban đầu được truyền lại. Nếu bạn đang làm điều gì đó tạo ra một đối tượng mới và bạn muốn Các thay đổi được phản ánh trong danh sách được thông qua trong Cài đặt

func(s):
   s[:] = whatever after mutating
   return s

x = a list of strings
print func(x)
print x
3 sẽ thay đổi danh sách ban đầu.

Đã trả lời ngày 11 tháng 7 năm 2015 lúc 17:12Jul 11, 2015 at 17:12

Hướng dẫn how to mutate a list in python - làm thế nào để thay đổi một danh sách trong python

3

Đó là cách nó hoạt động, chức năng có thể biến đổi danh sách

>>> l = ['a', 'b', 'c'] # your list of strings
>>> def add_something(x): x.append('d')
...
>>> add_something(l)
>>> l
['a', 'b', 'c', 'd']

Tuy nhiên, lưu ý rằng bạn không thể biến đổi danh sách ban đầu theo cách này

def modify(x):
    x = ['something']

(Ở trên sẽ gán

func(s):
   s[:] = whatever after mutating
   return s

x = a list of strings
print func(x)
print x
4 nhưng không phải là danh sách ban đầu
func(s):
   s[:] = whatever after mutating
   return s

x = a list of strings
print func(x)
print x
5)

Nếu bạn muốn đặt một danh sách mới trong danh sách của mình, bạn sẽ cần một cái gì đó như:

def modify(x):
    x[:] = ['something'] 

Đã trả lời ngày 11 tháng 7 năm 2015 lúc 17:09Jul 11, 2015 at 17:09

Bakkalbakkalbakkal

53.1K10 Huy hiệu vàng124 Huy hiệu bạc105 Huy hiệu đồng10 gold badges124 silver badges105 bronze badges

1

Các kiểu dữ liệu có thể thay đổi và bất biến trong Python gây ra rất nhiều vấn đề đau đầu cho các lập trình viên mới. Nói một cách đơn giản, các phương tiện có thể thay đổi có thể được thay đổi, và các phương tiện bất biến ’liên tục. Muốn đầu của bạn quay? Xem xét ví dụ này:

foo = ['hi']
print(foo)
# Output: ['hi']

bar = foo
bar += ['bye']
print(foo)
# Output: ['hi', 'bye']

Điều gì vừa xảy ra? Chúng tôi đã không mong đợi điều đó! Chúng tôi đã mong đợi một cái gì đó như thế này:

foo = ['hi']
print(foo)
# Output: ['hi']

bar = foo
bar += ['bye']

print(foo)
# Expected Output: ['hi']
# Output: ['hi', 'bye']

print(bar)
# Output: ['hi', 'bye']

Nó không phải là một lỗi. Nó có thể đột biến trong hành động. Bất cứ khi nào bạn gán một biến cho một biến khác của kiểu dữ liệu có thể thay đổi, mọi thay đổi đối với dữ liệu đều được phản ánh bởi cả hai biến. Biến mới chỉ là một bí danh cho biến cũ. Điều này chỉ đúng với các kiểu dữ liệu có thể thay đổi. Dưới đây là GOTCHA liên quan đến các chức năng và các loại dữ liệu có thể thay đổi:

def add_to(num, target=[]):
    target.append(num)
    return target

add_to(1)
# Output: [1]

add_to(2)
# Output: [1, 2]

add_to(3)
# Output: [1, 2, 3]

Bạn có thể đã mong đợi nó sẽ hành xử khác nhau. Bạn có thể mong đợi rằng một danh sách mới sẽ được tạo khi bạn gọi

func(s):
   s[:] = whatever after mutating
   return s

x = a list of strings
print func(x)
print x
6 như thế này:

def add_to(num, target=[]):
    target.append(num)
    return target

add_to(1)
# Output: [1]

add_to(2)
# Output: [2]

add_to(3)
# Output: [3]

Một lần nữa, đó là sự biến đổi của các danh sách gây ra nỗi đau này. Trong Python, các đối số mặc định được đánh giá một lần khi hàm được xác định, không phải mỗi lần hàm được gọi. Bạn không bao giờ nên xác định các đối số mặc định của loại có thể thay đổi trừ khi bạn biết những gì bạn đang làm. Bạn nên làm điều gì đó như thế này:

func(s):
   s[:] = whatever after mutating
   return s

x = a list of strings
print func(x)
print x
0

Bây giờ bất cứ khi nào bạn gọi hàm mà không có đối số

func(s):
   s[:] = whatever after mutating
   return s

x = a list of strings
print func(x)
print x
7, một danh sách mới sẽ được tạo. Ví dụ:

func(s):
   s[:] = whatever after mutating
   return s

x = a list of strings
print func(x)
print x
1

Danh sách có thể bị đột biến trong Python?

Danh sách & danh sách đột biến là có thể thay đổi.Điều này có nghĩa là chúng ta có thể cập nhật nội dung của một danh sách.Ví dụ: chúng ta hãy xem mã sau.Lists are mutable. This means that we can update the contents of a list. For example, let's take a look at the following code.

Bạn có thể đột biến một danh sách?

Danh sách được đặt hàng bộ sưu tập của các đối tượng khác.Và danh sách là có thể thay đổi.lists are mutable.

Điều gì là một danh sách trong Python?

Tạm biến từ có nghĩa là danh sách được thay đổi theo phương thức nhưng không có gì được trả về (thực sự không được trả về).Một phương thức lai là một phương thức không chỉ thay đổi danh sách mà còn trả về một giá trị như kết quả của nó.Cuối cùng, nếu kết quả chỉ đơn giản là một sự trở lại, thì danh sách không thay đổi bởi phương thức.the list is changed by the method but nothing is returned (actually None is returned). A hybrid method is one that not only changes the list but also returns a value as its result. Finally, if the result is simply a return, then the list is unchanged by the method.

Làm thế nào để bạn tạo ra một đột biến trong Python?

Sau đó phát hiện hàm () hàm được sử dụng để phát hiện đột biến.Trong chức năng này, x và y lấy từng ký tự trong DNA và cDNA cho ký tự bằng cách so sánh ký tự.Nếu ký tự ở cùng một chỉ số, thì số lượng được tăng lên.detectMutation() function is used to detect mutation. In this function, x and y take each character in dna and cdna for character by character comparison. If the character at the same index match, then the count is increased.