2
input1 = input("Corrupted: ")
input2 = ""
final = ""
for i in input1:
  if i in "ATGC ":
    input2 = input2 + i
for i in set(input2.split()):
  final = final + i + " "
print("DNA:",final.rstrip())

このプログラムの目的は、ユーザーがテキストの文字列を入力できるようにすることです。その中に DNA コードが隠されています。このプログラムは、DNA コード (基本的に、ATCG 以外のもの) を抽出します。また、重複する全体を削除します。それはすべて正しいことをしますが、質問を間違った順序で出力します。家庭教師に助けを求めたいのですが、彼は現在私を助けることができません。

Corrupted: A1TGcC A?T-G %^AT@CT ATGc #Notice the double ATG (2nd and last one)
DNA: ATGC ATCT ATG #Only one ATG since one is removed.

出力するつもりだったとき:

Corrupted: A1TGcC A?T-G %^AT@CT ATGc #This one is in the correct order. How do I get it to stay in the same order?
DNA: ATGC ATG ATCT
4

1 に答える 1

4

セットには順序がありません:

>>> print(set.__doc__)
...
Build an unordered collection of unique elements.

順序を維持するには、次のようなことができます。

>>> lis = [1, 2, 1, 1, 5, 5, 6]
>>> seen = set()
>>> [item for item in lis if item not in seen and not seen.add(item)]
[1, 2, 5, 6]

文字列連結の代わりにコードに使用できるのは、大きな文字列の場合regex、次のようなものinput2 = input2 + i非常に遅くなるためです。

>>> import re
>>> corruped = 'A1TGcC A?T-G %^AT@CT ATGc'
>>> lis = re.sub('[^ATGC\s]', '', corruped).split()
>>> lis
['ATGC', 'ATG', 'ATCT', 'ATG']
于 2013-09-07T07:21:17.693 に答える