Python Forum
Select the other of 2 items in a list
Thread Rating:
  • 0 Vote(s) - 0 Average
  • 1
  • 2
  • 3
  • 4
  • 5
Select the other of 2 items in a list
#1
I have a bit of code that selects the other of two items in a list. It works fine but I'm wondering if there a more pythonic way of doing it
import random
pieces = ["X", "O"]
piece = random.choice(pieces)
print(piece)

# is there a better way to select the other item in the list
opponent = pieces
opponent.remove(piece)
opponent = opponent[0]

print(opponent)
Reply
#2
What do you want to do, remove the piece from the existing list or get a new list that is the same as the existing but with the piece removed?
Reply
#3
I would probably just shuffle the list, then use the first one as my piece and the second as the opponent.

import random
pieces = ["X", "O"]
pieces = random.shuffle(pieces)

# my piece is always pieces[0] and my opponent is pieces[1]
If you really prefer to use separate variables for each piece (and I think there are reasons you shouldn't) then you could just sample the list like this...

import random
pieces = ["X", "O"]
piece, opponent = random.sample(pieces, k=2)
Reply
#4
(Aug-31-2020, 07:48 PM)bowlofred Wrote: I would probably just shuffle the list, then use the first one as my piece and the second as the opponent.

import random
pieces = ["X", "O"]
pieces = random.shuffle(pieces)

# my piece is always pieces[0] and my opponent is pieces[1]
If you really prefer to use separate variables for each piece (and I think there are reasons you shouldn't) then you could just sample the list like this...

import random
pieces = ["X", "O"]
piece, opponent = random.sample(pieces, k=2)

What I provided was just a simple working example. I need to be able to have one item of a list in a variable and use that yo put the other into a separate variable.
I cannot select them both at first as one item may be compared to many lists to select its counterpart from many list pairs.

opponent = pieces
opponent.remove(piece)
opponent = opponent[0]
Optomizing these 3 lines is my goal

(Aug-31-2020, 06:44 PM)deanhystad Wrote: What do you want to do, remove the piece from the existing list or get a new list that is the same as the existing but with the piece removed?

Not quite either. I have a list with two items and I have a variable containing one of those two items. I want to use the list and the variable to put the other item into a third variable.

Using a list and a variable containing one item in the list, I need to be able to store the other item in the list to a new variable.
Reply
#5
In your attempt above, if these are really lists then the opponent = pieces isn't useful because it's just referencing the pieces list, so any modification will modify both. I'm assuming that pieces already exists and that you don't want to change it.

If so, I'd use a comprehension to pull out everything that doesn't match. This doesn't check that there are really only two elements, or that piece is present as one of the elements. But if both are true, it will return the other element.
opponent = [x for x in pieces if x != piece][0]
Reply
#6
(Aug-31-2020, 08:51 PM)bowlofred Wrote: In your attempt above, if these are really lists then the opponent = pieces isn't useful because it's just referencing the pieces list, so any modification will modify both. I'm assuming that pieces already exists and that you don't want to change it.

If so, I'd use a comprehension to pull out everything that doesn't match. This doesn't check that there are really only two elements, or that piece is present as one of the elements. But if both are true, it will return the other element.
opponent = [x for x in pieces if x != piece][0]

You got it exactly. That is the answer that I was looking for. Thank you
Reply
#7
(Aug-31-2020, 08:30 PM)Clunk_Head Wrote: I need to be able to have one item of a list in a variable and use that yo put the other into a separate variable.
I think the solution, provided bu bowlorfred, that shuffle pieces and then unpack in two separate variables does exactly that and is the best one
If you can't explain it to a six year old, you don't understand it yourself, Albert Einstein
How to Ask Questions The Smart Way: link and another link
Create MCV example
Debug small programs

Reply
#8
(Sep-01-2020, 04:09 PM)buran Wrote:
(Aug-31-2020, 08:30 PM)Clunk_Head Wrote: I need to be able to have one item of a list in a variable and use that yo put the other into a separate variable.
I think the solution, provided bu bowlorfred, that shuffle pieces and then unpack in two separate variables does exactly that and is the best one

Not really, as they are to be drawn in separate pieces. This was not made evident by my original question or example. His later answer of using list comprehension serves the purpose for which I intended this code. I replied as such and marked the thread as solved.
Reply


Possibly Related Threads…
Thread Author Replies Views Last Post
  Count number of occurrences of list items in list of tuples t4keheart 1 106 Nov-03-2020, 05:37 AM
Last Post: deanhystad
  concatenating 2 items at a time in a python list K11 3 161 Oct-21-2020, 09:34 AM
Last Post: buran
  Removing items from list if containing a substring pythonnewbie138 2 351 Aug-27-2020, 10:20 PM
Last Post: pythonnewbie138
  Select correct item from list for subprocess command pythonnewbie138 6 481 Jul-24-2020, 09:09 PM
Last Post: pythonnewbie138
  Print the number of items in a list on ubuntu terminal buttercup 2 419 Jul-24-2020, 01:46 PM
Last Post: ndc85430
  How to put the items of one list in new generated lists Bobbear 1 313 Jun-12-2020, 06:08 AM
Last Post: buran
  Compare Two Lists and Replace Items In a List by Index nagymusic 2 567 May-10-2020, 05:28 AM
Last Post: deanhystad
  mydict.items() is not a list Skaperen 2 403 May-07-2020, 07:03 AM
Last Post: DeaD_EyE
  Add items from one list to list of lists PUP280 5 845 May-05-2020, 03:47 PM
Last Post: PUP280
  Can't seem to figure out how to put all of the lists items from a loop into 1 list Cosmosso 4 688 Feb-21-2020, 02:40 PM
Last Post: Cosmosso

Forum Jump:

User Panel Messages

Announcements
Announcement #1 8/1/2020
Announcement #2 8/2/2020
Announcement #3 8/6/2020