Drucken von Elementen aus der Liste

Ich habe eine gewisse prüfung getan und wenn die prüfung erfüllt ist, möchte ich das zu drucken Unten ist der Code:

import string import codecs import sys y=sys.argv[1] list_1=[] f=1.0 x=0.05 write_in = open ("new_file.txt", "w") write_in_1 = open ("new_file_1.txt", "w") ligand_file=open( y, "r" ) #Open the receptor.txt file ligand_lines=ligand_file.readlines() # Read all the lines into the array ligand_lines=map( string.strip, ligand_lines ) #Remove the newline character from all the pdb file names ligand_file.close() ligand_file=open( "unique_count_c_from_ac.txt", "r" ) #Open the receptor.txt file ligand_lines_1=ligand_file.readlines() # Read all the lines into the array ligand_lines_1=map( string.strip, ligand_lines_1 ) #Remove the newline character from all the pdb file names ligand_file.close() s=[] for i in ligand_lines: for j in ligand_lines_1: j = j.split() if i == j[1]: print j 

Der oben genannte Code funktioniert super, aber wenn ich j drucke, druckt es wie ['351', '342'], aber ich erwarte, 351 342 (mit einem Zwischenraum dazwischen) zu bekommen. Da es mehr von einer Python-Frage ist, habe ich nicht die Eingabedateien (im Grunde genommen sind sie nur Zahlen).

Kann mir jemand helfen?

Prost,

Chavanak

  • Mehrfachlisten vertikal drucken
  • 2 Solutions collect form web for “Drucken von Elementen aus der Liste”

    Um eine Liste von Strings in einen einzelnen String mit Leerzeichen zwischen den Listen der Listen ' '.join(seq) , verwenden Sie ' '.join(seq) .

     >>> ' '.join(['1','2','3']) '1 2 3' 

    Sie können ' ' mit dem String ersetzen ' ' Sie zwischen den Elementen wünschen.

    Mark Rushakoff scheint Ihr sofortiges Problem gelöst zu haben, aber es gibt einige andere Verbesserungen, die zu deinem Code gemacht werden könnten.

    • Verwenden Sie immer Kontextmanager ( with open(filename, mode) as f: zum Öffnen von Dateien, anstatt sich darauf zu verlassen, dass man manuell manuell anruft.
    • Kümmern Sie sich nicht darum, eine ganze Datei sehr oft in Erinnerung zu bringen. Looping über some_file.readilines() kann durch Looping über some_file direkt ersetzt werden.

      • Zum Beispiel könntest du die map(string.strip, ligland_file) oder besser noch [line.strip() for line in ligland_file]
    • Wählen Sie keine Namen, um den Typ des Objekts einzuschließen, auf das sie sich beziehen. Diese Informationen finden Sie auf anderen Wegen.

    Für exmaple, kann der Code, den Sie gepostet haben, um etwas in der Linie von vereinfacht werden

     import sys from contextlib import nested some_real_name = sys.argv[1] other_file = "unique_count_c_from_ac.txt" with nested(open(some_real_name, "r"), open(other_file, "r")) as ligand_1, ligand_2: for line_1 in ligand_1: # Take care of the trailing newline line_1 = line_1.strip() for line_2 in ligand_2: line_2 = line2.strip() numbers = line2.split() if line_1 == numbers[1]: # If the second number from this line matches the number that is # in the user's file, print all the numbers from this line print ' '.join(numbers) 

    Das ist zuverlässiger und ich glaube leichter zu lesen.

    Beachten Sie, dass die algorithmische Leistung davon bei weitem nicht ideal ist, weil diese verschachtelten Schleifen sind. Abhängig von Ihrer Notwendigkeit, könnte dies möglicherweise verbessert werden, aber da weiß ich nicht genau, welche Daten Sie extrahieren müssen, um Ihnen zu sagen, ob Sie können.

    Die Zeit, die dies derzeit in meinem Code und deinem ist, ist O (n m q), wobei n die Anzahl der Zeilen in einer Datei ist, m die Anzahl der Zeilen in der anderen und q die Länge der Zeilen in unique_count_c_from_ac.txt ist . Wenn zwei davon fest / klein sind, dann haben Sie lineare Leistung. Wenn zwei willkürlich wachsen können (ich stelle mir vor, n und m kann?), Dann könnten Sie in die Verbesserung Ihres Algorithmus, wahrscheinlich mit Sets oder Dicts suchen.

    Python ist die beste Programmiersprache der Welt.