2017-04-22 1 views
-2

インタビューでこの問題を解決できませんでした。 1Dの1つのアレイのみが厳密に使用されます。提供される名前は、 優先順位1)名前の最初の文字、 の名前2)最初の文字の名前が次に表示されます。 優先順位3)その文字のみを含む名前。 文字を含まない名前は省略してください。これら3組の名前の中の名前の順序は関係ありません。文字と名前のリストはユーザーが入力します。私はPythonのソリューションを探しています。質問の例:Pythonを使用して提供された任意の文字に基づいて単一の1D配列を使用して名前をソート

入力:

'Jacob Rand,Hari Ram,Rambo Singh,Satish Kumar,Raghvan Kumar,Sam Keshav' 

手紙:

R 

マイ出力:

'Rambo Singh', 'Raghvan Kumar', 'Jacob Rand', 'Hari Ram' 

予想される出力:

'Rambo Singh', 'Raghvan Kumar', 'Jacob Rand', 'Hari Ram', 'Satish Kumar' 

コード(これは適切ではない、私はR/R(大文字/小文字)の差を処理していない+多くのアレイを使用している):

#Please note that I am looking for program which uses a single array 
set1=[] 
set2=[] 
set3=[] 
def arranged(Letter,nameList): 
    nameListNew=nameList.split(',') 
    for eachName in nameListNew: 
     if Letter in eachName: 
      if Letter==eachName[0]: 
       set1.append(eachName) 
      else: 
       secondName=eachName.split(' ') 
       if Letter==secondName[0]: 
        set2.append(eachName) 
       else: 
        set3.append(eachName) 
    OutputArray=set1+set2+set3 
    print(OutputArray) 

listOfNames='Jacob Rand,Hari Ram,Rambo Singh,Satish KumaR,Raghvan Kumar,Sam Keshav' 
arranged('R', listOfNames) 
+0

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

+0

できませんでした。私はこれを行うために3つの配列を作って、最後にそれらに参加しました:P。面接官はそれを完全に拒絶した。 –

+0

失敗した場合でも、あなたの努力を示すと、私たちはあなたを助ける可能性がさらに高くなります。試行した試合の結果とその試合が間違っている理由を説明してください。ところで、問題の声明は完全に明確ではありません。名前がこれらの要件の1つ以上を満たしている場合は、最初に満たされた要件の順にリストされるか、繰り返して記載されるべきですか?単一の名前はどうですか:名前を名字として扱うのですか?ミドルネームや3つ以上の名前はどうですか? –

答えて

1

Iが正確にあなたの出力と一致しないが、溶液を有することができます。

['Rambo Singh', 'Raghvan Kumar', 'Hari Ram', 'Jacob Rand'] 

サティシュ・クマールはなし「R」として含まれていない存在である、とハリがヤコブ(Rの私より短い名前があるようハリラムは、ヤコブランドの前に来る:

def arranged(names, letter): 
    # get names containing letter (case-sensitive) 
    name_arr = [name for name in names.split(",") if letter.lower() in name.lower()] 
    # sort comparing the index of letter in name 
    return sorted(name_arr, key=lambda name: name.find(letter)) 

names = "Jacob Rand,Hari Ram,Rambo Singh,Shyam,Satish Kumar,Raghvan Kumar,Sam Keshav" 
letter = "R" 

print(arranged(names, letter)) 

出力がありますndexは低い)。 名前は大文字であるため、大文字でなければなりません。

+0

おかげで..あなたは素晴らしいです!inbuiltのpython関数を使ってR/Rを関連付ける方法はありますか?大文字小文字を区別しないようにしたいですか? –

+0

@AvinashKumarええ、大文字と小文字を区別せずに名前を含めるには、リスト内包表記の.lower()メソッドを使用できます。私の編集された答えを見てください。 – rolika

+0

上記のコードは機能しません。私はlower()を使うと、あなたが使ったロジックは使用できないと思います。なぜなら、名前 'Hari Kumar'は 'Sashi Rockie'の前に置かれるからです。以前のバージョンのコードには満足しています。それ以外のロジックは適用できますか? –

関連する問題