2017-03-21 25 views
0

私は、1つのリストをpythonで整理するのに助けが必要です。 私が必要なのは: 私はこのようなリストを持っています:[10,50,20,'STRING',5]、私はこのような文字列を移動することなく、このリストを整理する必要があります:[5,'STRING'10,20,50]。それは可能ですか? ありがとう!文字列と数字でリストをソート

2つの文字列に交差があるかどうかをチェックするためにリンクされたリストを作成する必要があります。 'def Intersecao'でこれをチェックしてください。出力が順序づけされていなければなりません。バージオ '。最初の質問については

class No(): 
    def __init__(self, valor = None, proximo = None): 
     self.valor = valor 
     self.proximo = proximo 

    def getValor(self): 
     return self.valor 

    def getProximo(self): 
     return self.proximo 

    def setProximo(self, novo_proximo): 
     self.proximo = novo_proximo 

class lista(): 
    def __init__(self, inicio = None): 
     self.inicio = inicio 

    def Inserir(self, valor): 
     novo_no = No(valor) 
     novo_no.setProximo(self.inicio) 
     self.inicio = novo_no 


    def Buscar(self, valor): 
     dados = self.inicio 
     while dados: 
      if dados.getValor() == valor: 
       return dados 
      else: 
       dados = dados.getProximo() 
     return None 


    def Intersecao (self, lista): 
     no = self.inicio 
     intersecao = [] 
     while no != None: 
     if (not lista.Buscar(no.getValor())): 
      no = no.getProximo() 
     else: 
      if(no.getValor() == ''): 
       intersecao.append('VAZIO') 
       no = no.getProximo() 
      elif(no.getValor() in intersecao): 
       no = no.getProximo() 
      else: 
       intersecao.append(no.getValor()) 
       no = no.getProximo() 
     return intersecao 

    def MostrarLista(self): 
     lista = [] 
     dados = self.inicio 
     while dados: 
      lista.append(str(dados.getValor())) 
      dados = dados.getProximo() 
     print('->'.join(lista)) 

MyList = lista() 
MySecondList = lista() 
lista = [] 
lista2 = [] 

for i in range(40): 
    dado = input() 
    if i < 20: 
    lista.append(dado) 
    elif i >= 20: 
    lista2.append(dado) 

for i in lista: 
    MyList.Inserir(i) 

for i in lista2: 
    MySecondList.Inserir(i) 

listaOrdenada = [] 
for elementos in sorted(MyList.Intersecao(MySecondList)): 
    print(elementos) 
+0

あなたは何を試しましたか? – CaptainTrunky

+2

あなたは少なくともあなたのために仕事をしたいと思うのではなく、問題を解決しようとする試みを少なくとも提示すれば人々は助けになるでしょう、私はあなたにヒントを与えて、リストの 'STRING'文字列をポップしてリストをソートし、最後に文字列を元のインデックスに再挿入します...今すぐ試してみてください。 – Dalvenjia

+0

あなたのソートの基準は何ですか?単なる数値ソートですか?さらに、何を試しましたか?これにあなた自身の試みを示して、あなたがどんな困難を抱えているか説明してください。 StackOverflowはコード作成サービスではありません。 *明示的なプログラミング問題のための助けを提供するコミュニティです。問題の[MCVE]を表示してください。 – idjaw

答えて

0

それが唯一のリストであれば、やるための1つの方法である(しかし、より良い方法があるかもしれません):

# original list 
my_list = [10,50,20,'STRING',5] 

# Creating temporary list with all numbers in sorted order and reverse 
# reversed such that we use pop() which is efficient in time complexity 
sorted_list = sorted([element for element in my_list if not isinstance(element, str)], reverse=True) 

# new list to append accordingly 
new_list = [] 

# for each element if it is string then in new list it has same position as in original list 
# else if it was originally number then, we append the respective sorted number 

for index, element in enumerate(my_list): 
    if isinstance(element, str): 
     new_list.append(element) 
    else: 
     new_list.append(sorted_list.pop()) 
new_list  

出力:

[5, 10, 20, 'STRING', 50] 

かそれはきれいに見えるリストの理解で行うことができます:

# Using list comprehension 

my_list = [10,50,20,'STRING',5] 
sorted_list = sorted([element for element in my_list if not isinstance(element, str)], reverse=True) 

new_list = [element if isinstance(element, str) else sorted_list.pop() for index, element in enumerate(my_list)] 
new_list 

これは同じ出力を与えます。

+0

私は "String"を動かすことができないと思っていましたが、位置に応じて順序付けが必要でした。たとえば、この例では、出力は次のとおりです。 元= [20,19,18,17,16,15,14、 'EMPTY'、12、11、10] 新規= [10,11,12,14 、15,16,17、 'EMPTY'、18、19、20] ただし、注文は次のいずれかでなければなりません: [10,11,12、 'EMPTY'、14、15、16、17、18、19、20 ] 私の間違い、どうすればいいですか? – DouglasNickson

+0

逆順で入力されますか?入力が '[0、10、2、7、 'STRING'、5、1]'の場合はどうなりますか? – 0p3n5ourcE

+0

私は自分のコードを1つのソフトウェアに送信するので、どのように自分のコードをテストするので、彼は入力を送信し、いくつかの出力を期待しています。 たとえば、入力はarray1 = [2,4,3,6,7]とarray2 = [2,3,6,7,8]です。この場合、2つの配列で交差を確認する必要がありますouputをこのようにする必要があります 7と交差が空であった場合、私はexemploために、文字列「VAZIO」を印刷する必要がある: 配列1 = [2,4,3,6,7、 '']と配列2 = [2,3,6,7,8、 '']、出力はする必要がありますでisinstanceない場合 VAZIO – DouglasNickson

関連する問題