How to switch position of two items in a Python list?
i = ['title', 'email', 'password2', 'password1', 'first_name',
'last_name', 'next', 'newsletter']
a, b = i.index('password2'), i.index('password1')
i[b], i[a] = i[a], i[b]
How can I swap two elements in one array?
#a=np.array([2,7])
a=[2,7]
# Reversing a list using slice notation
print (a[::-1]) # [7, 2]
# The reversed() method
print (list(reversed(a))) # [7, 2]
swap two elements in a list:
# Swap function
def swapPositions(list, pos1, pos2):
list[pos1], list[pos2] = list[pos2], list[pos1]
return list
a=[2,7]
pos1, pos2 = 0, 1
print(swapPositions(a, pos1 - 1, pos2 - 1))
Swap elements within a list
You can swap tuples in one step with:
def swap(x, y):
mylist[x], mylist[y] = mylist[y], mylist[x]
mylist = ["a", "b", "c", "d"]
swap(2, 3)
print(mylist)
# ['a', 'b', 'd', 'c']
Better way to swap elements in a list?
No need for complicated logic, simply rearrange the list with slicing and step:
In [1]: l = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
In [2]: l[::2], l[1::2] = l[1::2], l[::2]
In [3]: l
Out[3]: [2, 1, 4, 3, 6, 5, 8, 7, 10, 9]
TLDR;
Edited with explanation
I believe most viewers are already familiar with list slicing and multiple assignment. In case you don't I will try my best to explain what's going on (hope I do not make it worse).
To understand list slicing, here already has an excellent answer and explanation of list slice notation.
Simply put:
a[start:end] # items start through end-1
a[start:] # items start through the rest of the array
a[:end] # items from the beginning through end-1
a[:] # a copy of the whole array
There is also the step value, which can be used with any of the above:
a[start:end:step] # start through not past end, by step
Let's look at OP's requirements:
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10] # list l
^ ^ ^ ^ ^ ^ ^ ^ ^ ^
0 1 2 3 4 5 6 7 8 9 # respective index of the elements
l[0] l[2] l[4] l[6] l[8] # first tier : start=0, step=2
l[1] l[3] l[5] l[7] l[9] # second tier: start=1, step=2
-----------------------------------------------------------------------
l[1] l[3] l[5] l[7] l[9]
l[0] l[2] l[4] l[6] l[8] # desired output
First tier will be: l[::2] = [1, 3, 5, 7, 9]
Second tier will be: l[1::2] = [2, 4, 6, 8, 10]
As we want to re-assign first = second
& second = first
, we can use multiple assignment, and update the original list in place:
first , second = second , first
that is:
l[::2], l[1::2] = l[1::2], l[::2]
As a side note, to get a new list but not altering original l
, we can assign a new list from l
, and perform above, that is:
n = l[:] # assign n as a copy of l (without [:], n still points to l)
n[::2], n[1::2] = n[1::2], n[::2]
Hopefully I do not confuse any of you with this added explanation. If it does, please help update mine and make it better :-)
Python: change elements position in a list of instances
First, I didn't get the error you mentioned.
Second, it seems that you made a mistake in using insert
, should be insert(1, c)
rather than insert(c, 1)
, see docs
>>> d = [[1, 2], [5, 6], [3, 4]]
>>> c = d[1]
>>> d.remove(c)
>>> d
[[1, 2], [3, 4]]
>>> d.insert(c, 1)
Traceback (most recent call last):
File "<pyshell#16>", line 1, in <module>
d.insert(c, 1)
TypeError: 'list' object cannot be interpreted as an integer
>>> d.insert(1, c)
>>> d
[[1, 2], [5, 6], [3, 4]]
Related Topics
Error When Configuring Tkinter Widget: 'Nonetype' Object Has No Attribute
How to Debug in Django, the Good Way
Elegant Python Function to Convert Camelcase to Snake_Case
Multiprocessing: Understanding Logic Behind 'Chunksize'
What Is the Quickest Way to Http Get in Python
Differencebetween Contiguous and Non-Contiguous Arrays
How to Convert a Dataframe to a Dictionary
Setting Different Color for Each Series in Scatter Plot on Matplotlib
Creating a New Column Based on If-Elif-Else Condition
How to Insert a Column at a Specific Column Index in Pandas
Choosing a File in Python with Simple Dialog
Python 3: Importerror "No Module Named Setuptools"
How to Overload Python Assignment
What Does the Percentage Sign Mean in Python
How to Add an Image in Tkinter