简体   繁体   中英

How do I put a string in a list at every nth index?

I'm working on a function that gets the suit and value as a string in a list from another function:

def getCard(n):
    deckListSuit = []
    grabSuit = getSuit(n)
    n = (n-1) % 13 + 1
    if n == 1:
        deckListSuit.append("Ace")
        return deckListSuit + grabSuit
    if 2 <= n <= 10:
        deckListSuit.append(str(n))
        return deckListSuit + grabSuit
    if n == 11:
        deckListSuit.append("Jack")
        return deckListSuit + grabSuit
    if n == 12:
        deckListSuit.append("Queen")
        return deckListSuit + grabSuit
    if n == 13:
        deckListSuit.append("King")
        return deckListSuit + grabSuit

With the new function it is to take the information from the above function and return it in a list with a certain structure "VALUE of SUIT".

So say if you had "3", "Spades" it would return "3 of Spades" instead.

This is my code so far on the new function.

def getHand(myList):
    hand = []
    for n in myList:
        hand += getCard(n)
    return [(" of ".join(hand[:2]))] + [(" of ".join(hand[2:4]))] + [(" of ".join(hand[4:6]))] + [(" of ".join(hand[6:8]))] + [(" of ".join(hand[8:10]))]

My question is, is how do I insert "of" between the value and suit without having to do .join a million times?

You can do it in your for loop

for n in myList:
    hand += [" of ".join(getCard(n))]

return hand

You can also do it in getCard and return '3 of Spades'


BTW: you could keep it as tuples on list

hand = [ ("3", "Spades"), ("Queen", "Spades"), ... ]

then you can use for loop instead of slices [:2] , [2:4]

new_list = []
for card in hand: 
    # in `card` you have ("3", "Spades")
    new_list.append(' of '.join(card))

return new_list

If you use a list of tuple you can do with format and list comprehension

test_hand = [("3","space"),("4","old")]
return ["{} of {}".format(i,z) for i,z in (test_hand)]

output:

 ['3 of space', '4 of old']

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM