Schnelle Kreuzung von zwei Listen in Python

Ich habe zwei Listen von Genen, die ich analysiere. Im Grunde möchte ich die Elemente dieser Listen viel in der gleichen Weise wie ein Venn-Diagramm sortieren, dh Elemente, die nur in der Liste 1 auftreten, werden in einer Liste platziert, die nur in der Liste 2 sind in einem anderen und die in beiden sind in einem dritte.

Mein Code so weit:

from Identify_Gene import Retrieve_Data #custom class import argparse import os #enable use from command line parser = argparse.ArgumentParser(description='''\n\nFind the intersection between two lists of genes\n ''') parser.add_argument('filename1',help='first list of genes to compare') parser.add_argument('filename2',help='second list of genes to compare') parser.add_argument('--output_path',help='provide an output filename') args = parser.parse_args() os.chdir(args.output_path) a = Retrieve_Data() # custom class, simply produces a python list list1 = a.parse_gene_list(args.filename1) list2 = a.parse_gene_list(args.filename2) intersection = [] list1_only = [] list2_only = [] if len(list1)>len(list2): for i in range(0,len(list1)): if list1[i] in list2: intersection.append(list1[i]) else: list1_only.append(list1[i]) for i in range(0,len(list2)): if list2[i] not in list1: list2_only.append(list2[i]) else: for i in range(0,len(list2)): if list2[i] in list1: intersection.append(list2[i]) else: list2_only.append(list2[i]) for i in range(0,len(list1)): if list1[i] not in list2: list1_only.append(list2[i]) filenames = {} filenames['filename1'] = 'list1_only.txt' filenames['filename2'] = 'list2_only.txt' filenames['intersection'] = 'intersection.txt' with open(filenames['filename1'],'w') as f: for i in range(0,len(list1_only)): f.write(list1_only[i]+'\n') with open(filenames['filename2'],'w') as f: for i in range(0,len(list2_only)): f.write(list2_only[i]+'\n') with open(filenames['intersection'],'w') as f: for i in range(0,len(intersection)): f.write(intersection[i]+'\n') 

Dieses Programm gibt mir derzeit zwei identische Listen als list1_only und list2_only wo sie sich gegenseitig ausschließen sollten. Die Kreuzungsdatei ist anders, obwohl ich nicht das Gefühl habe, dass es vertraut werden kann, da sich die beiden anderen Listen nicht wie erwartet verhalten.

Ich habe mich informiert (seit der Entsendung dieser Frage), dass diese Operation einfach über das Python 'Sets' Modul durchgeführt werden kann, aber für pädagogische Zwecke, würde ich immer noch gerne dieses Programm zu beheben

2 Solutions collect form web for “Schnelle Kreuzung von zwei Listen in Python”

Es gibt einen Fehler in der Aufstellung der Listen.

Im Abschnitt:

 for i in range(0,len(list1)): if list1[i] not in list2: list1_only.append(list2[i]) 

Die letzte Zeile sollte sein:

  list1_only.append(list1[i]) 

Vielleicht möchten Sie auch diese handliche Website auschecken:

http://jura.wi.mit.edu/bioc/tools/compare.php

  • CSV in Python sortieren
  • Python 3 Liste: Wie stelle ich [('NJ', 81), ('CA', 81), ('DC', 52)] Basis auf Nummer und dann Briefe?
  • Strcmp für Python oder wie man Substrings effizient (ohne Kopie) beim Aufbau eines Suffix-Arrays sortiert
  • Python-Liste in absteigender Reihenfolge sortieren
  • Ranking Werte in einem Wörterbuch (und kümmert sich um Ex-Aequos richtig)
  • Effiziente Bestimmung, ob große sortierte numpy Array hat nur eindeutige Werte
  • Ranking von numpy Array mit möglichen Duplikaten
  • Python-Sortierliste von Tupel
  • Schnell sortieren python rekursion
  • So finden Sie die max. Nummer (n) in einer Liste mit gebundenen Nummern
  • Python Math - TypeError: 'NoneType' Objekt ist nicht abonnierbar
  • Python ist die beste Programmiersprache der Welt.