Удаление элемента из списка в цикле - PullRequest
0 голосов
/ 04 апреля 2020
import stdio
import sys
import random

SUITS = ["Clubs", "Diamonds", "Hearts", "Spades"]
RANKS = ["2", "3", "4", "5", "6", "7", "8", "9", "10", "Jack", "Queen ", "King", "Ace"]


rank = random . randrange (0 , len( RANKS ))
suit = random . randrange (0 , len( SUITS ))
stdio . writeln ( RANKS [ rank ] + "of" + SUITS [ suit ])

deck = []
for rank in RANKS :
    for suit in SUITS :
        card = rank + "of" + suit
        deck += [ card ]


n = len ( deck )
for i in range ( n ):
    r = random . randrange (i , n)
    temp = deck [r]
    deck [r] = deck [i]
    deck [i] = temp


h = []

b = int(sys.argv[1])

k = 1
for l in range(b):
    while k <= b:
        f = random.randrange(n)
        h += [deck[f]]
        deck.pop([deck[f]]) # this line is the problem, i wnat to move [deck[f]], from deck but getting a                      
                               type eror
        k += 1
    print(h)

# это моя командная строка

Файл "C: \ Users \ USER \ Desktop \ app \ pokerhands.py", строка 37, в deck.pop ([deck [f ]]) TypeError: объект 'list' нельзя интерпретировать как целое число

Ответы [ 3 ]

1 голос
/ 04 апреля 2020

Вместо deck.pop([deck[f]]), попробуйте deck.pop(f).

list.pop(index) удаляет элемент на index. Вы пытаетесь использовать список, содержащий строку в качестве индекса, а не целое число.

0 голосов
/ 04 апреля 2020

Добро пожаловать в переполнение стека.

Я заметил, что вы делаете две вещи.

Во-первых,

.pop(arg) - это встроенная функция python в качестве параметра принимается index , а не значение массива.

Итак, во-первых, измените deck.pop([deck[f]]) на deck.pop(f), предполагая, что вы хотите случайно удалить элементы из списка внутри вашего l oop.

Во-вторых

Вы являетесь случайный выбор индекса между (0, n) для удаления из вашего списка. Однако на каждой итерации вы не уменьшаете значение n и, следовательно, можете получить индексный массив за пределами исключения. Простое решение - просто уменьшить значение n на каждой итерации. Вот так:

n -= 1

0 голосов
/ 04 апреля 2020

Используйте del deck[f] или используйте deck.pop["index of element in deck"].

...