Así que tengo una pregunta sobre la comprobación de la lista. Estoy estableciendo un sistema de contratación, en el que tengo individuos, su tasa y las habilidades que tienen. Estoy tratando de crear una función que me permita ingresar dos personas, y básicamente, la salida debe dar los valores, sin duplicados. Tome nota de que los individuos mismos son tuplas. Con habilidades y costo.

He intentado habilidades de codificación individualmente duras, pero al parecer eso frustraría el propósito si se implementa alguna habilidad nueva.

También he intentado recorrer pero todavía no puedo obtener los valores para leer de la segunda persona.

jess = (["php", "java"], 200)

clark = (["php", "c++", "go"], 1000)

john = (["lua"], 500)

cindy = (["php", "go", "word"], 240)

candidates = [jess, clark, john, cindy]

project = ["php", "java", "c++", "lua", "go"]

def skills(candidates):                   ## This command is supposed to find the possible skills of all the individuals.
    skillset = []                         ## empty list to contain the skills that are going to be appended
    for x in (candidates):                ## so basically the x represents the tuple set
        skillset.append(x[0])             ## the tuple selection represents the skills of the given candidates
        if x[0] not in skillset:          ## if the selected component of the tuple is not in the skill list, then the component should be removed
            skillset.append(x[0])
        else:
            return skillset


    return skillset



(print(skills([cindy, clark])))
0
Ashwin Sarith 11 may. 2019 a las 14:16

4 respuestas

La mejor respuesta

Podrías usar conjuntos, evitan duplicados.

def skills(candidates):
    skillset = set()
    for x in candidates:
        skillset.update(x[0])
    return list(skillset)
1
gregk 11 may. 2019 a las 11:35

Parece que está tratando de ver si algunos candidatos aportan suficientes habilidades para ejecutar un proyecto.

Este código te ayudará en tu camino:

# candidates and project the same as posted

def skills(candidates):                   ## This command is supposed to find the possible skills of all the individuals.
    skillset = set()                      ## empty set to contain the skills that are going to be appended
    for x in candidates:                  ## iterate over candidates
        for skill in x[0]:                ## iterate of each candidates skills
            skillset.add(skill)

    return skillset

availableSkills = skills([jess, clark, john])
requirement = set(project)
print(availableSkills)
print(requirement)
print(availableSkills >= requirement)

Salida:

{'go', 'c++', 'lua', 'java', 'php'}
{'go', 'c++', 'lua', 'java', 'php'}
True

Ha descubierto que jess, clark and john tiene las habilidades para project.

0
quamrana 11 may. 2019 a las 11:35

Entiendo que su objetivo es combinar las habilidades de dos candidatos.

Entonces, cuando Clark puede hacer PHP, C + y Go, y Cindy puede hacer PHP, Go y Word.

La combinación debería ser PHP, C +, Go y Word.

Esta función de habilidades debería hacer eso:

def skills(candidates):
    skillset = []  
    for x in (candidates):       
        for skill in x[0]:
            if skill not in skillset:
                skillset.append(skill)
    return skillset

En lugar de simplemente verificar si un conjunto de habilidades no está ya en la lista, va a cada conjunto de habilidades y las agrega a una nueva lista, si la habilidad individual aún no está allí.

0
Bjarnemus 11 may. 2019 a las 11:44

Su código tiene algún punto oscuro.
Por ejemplo, agrega x[0] a skillset y luego verifica si x[0] está en skillset, que siempre es True.


Todas las demás respuestas resuelven su problema, aquí una variante de una línea:

def skills(candidates): return list({x for c in candidates for x in c[0]})
0
Lante Dellarovere 11 may. 2019 a las 11:51