Frage
str={'Tom':'1,2,3','Jack':'1,5,9','Bob':'2','Li':'2,7'}
Wenn Sie 1 in Toms Nummer finden, müssen Sie Jacks 5 und 9 dort
geben ist eine 2 in Toms Nummer, also muss er Lis 7 geben. Tom hat nur eine 2, und es gibt keine andere Nummer, also kann er sie nicht geben.
Es wird festgestellt, dass es eine 3 gibt Toms Nummer, und weder Jack noch Bob noch Li haben sie. Ich kann sie nicht nennen Sie wissen nicht, ob die Beschreibung klar ist?
Reale Situation: Es gibt viele Leute, mindestens 10.000, und die Zahl beträgt mindestens 100.00
Wie schreibe ich dieses Programm effizient? Vielen Dank
str_related={'Tom':'5,9,7','Jack':'2,3','Bob':'1,3,7','Li':'1,3'}
Antwort 1:
kann so aufgeteilt werden weil ich nicht weiß, ob Ihre Parameter sind korrekt. Also habe ich es so geschrieben
Später habe ich herausgefunden, dass das, was Sie wollen, in PHP geschrieben ist >const objLast = {} const tempTom = [] const tom = str['Tom'].solit(',') tom.map((item, i)=> { for(let key in str) { if(key != 'Tom') { tempTom.concact(getLastOfArr(str[key].split(','), item)) } } }) objLast.Tom = tempTom.join() function getLastOfArr(arr, removeKey) { return arr.filter((item, index) => { item != removeKey }) }
Ergebnis:
Optimierung~Berechnen Sie es zuerst und speichern Sie den gültigen Satz, um unnötige Doppelzählungen zu vermeiden.data = {'Tom':{1,2,3},'Jack':{1,5,9},'Bob':{2},'Li':{2,7}} rslt = {} for k in data: s=set() for x in data: if k!=x: s |= data[k]&data[x] and data[x]-data[k] rslt[k] = s print(rslt)