函数,该函数接受一个Int和一个List

2024-05-12 22:27:16 发布

您现在位置:Python中文网/ 问答频道 /正文

我有下面一个纸牌游戏的代码,它应该从给定的牌列表中删除N个汽车,并返回一个包含2个列表的元组,第一个列表是原始列表中的N个对象,第二个列表是未从原始列表中提取的剩余牌

lista_cartas = [1,2,3,4,5,6,7,8]
lista_N = []
N = 5
for i in range(N):
    extracto = lista_cartas.pop(0)
    lista_N.append(extracto)
    lista_final = [lista_N, lista_cartas]
print(tuple(lista_final))

([1, 2, 3, 4, 5], [6, 7, 8])

这是我想要的,但我需要把它转换成一个函数,以N个数和列表作为参数,我如何实现这一点

这是有效的吗?或者如何使函数获取列表

def sacar_cartas(N, lista=[]):
   for i in range(N):
       extracto = lista_cartas.pop(0)
       lista_N.append(extracto)
       lista_final = [lista_N, lista_cartas]
print(tuple(lista_final))

Tags: 函数in游戏列表forrangepopfinal
3条回答

简单转换:

def sacar_cartas(N, lista):
    lista_N = []
    for i in range(N):
        extracto = lista.pop(0)
        lista_N.append(extracto)
    return tuple([lista_N, lista])
print(sacar_cartas(5, [1,2,3,4,5,6,7,8]))

稍微修改了代码,这样函数就不会改变传入的列表(因为lista_cartas.copy()调用)。至于代码和问题,Python函数可以接受列表作为变量,而不告诉它是列表

lista_cartas = [1,2,3,4,5,6,7,8]

def sacar_cartas(N, lista_cartas):
    lista_N = []
    lista_ct = lista_cartas.copy()
    for i in range(N):
        extracto = lista_ct.pop(0)
        lista_N.append(extracto)
        lista_final = [lista_N, lista_ct]
    return lista_final    

sacar_cartas(5, lista_cartas)

您可以使用list slices完全返工您的解决方案:

lista_cartas = [1,2,3,4,5,6,7,8]

def sacar_cartas(todas_cartas, N):
    return todas_cartas[:N], todas_cartas[N:]

这样sacar_cartas(lista_cartas, 5)会导致tuple

([1, 2, 3, 4, 5], [6, 7, 8])

注意我们如何通过返回逗号分隔的值来避免显式的tuple调用

相关问题 更多 >