2016-06-01 25 views
0

私は文字列のリストを持っており、各文字列(リスト項目)から特定の数の文字を選びたいと思っています。私は文字列をスライスする方法について少しは知っていましたが、リストをどのように動作させるかわかりません。また、私はこれがまったく一緒に行く方法であるかどうか分かりません。 例: 私はリストリスト項目からx(f.e.最初の文字)を選び、新しいリストからランダムな項目を選ぶ

['abcd12', 'efgh34', 'ijkl56', 'mnop78'] 

を持っていると私は、各文字列('ab', 'ef', 'ij', 'mn')の最初の2つの文字を抽出して別のリストに入れたいと思います。 何か助けていただければ幸いです。

編集: これは動作しますが、スライスする前にリストを印刷するのに問題があります。ここでは、完全なコードは(ランダムな部分は同様に動作するようには思えない)です:

#!/usr/bin/env python3.4 
# -*- coding: utf-8 -*- 

import random 

def generateSequences (n): 

    L = [] 
    dna = ["A","G","C","T"] 
    for i in range(int(n)): 

     random_sequence='' 

     for i in range(10): 
      random_sequence+=random.choice(dna) 

     L.append(random_sequence) 

    print(L) 
    return L 

def generatePrefixes (p, L): 

    S = [x[:20] for x in L] 
    D = [] 
    for i in range(p): 
     randomPrefix = random.choice(S) 
     D.append(randomPrefix) 

    return S, D 

if __name__ == "__main__": 
    generateSequences(15) 
    print (L) 
    generatePrefixes(4) 
    print (S) 
    print (D) 

それだけで罰金S出力しますが、Lが定義されていないことを私に伝えます。奇妙なことは、Sも未定義であることを示していますが、まだ動作しています。 また、私はランダムなエントリを選択する部分を取得するように見えません。 Dはまったく表示されません。

答えて

2

あなたは、文字列のスライシングとlist comprehensionを組み合わせることができ、あなたは、次のGET:

>>> l = ['abcd12', 'efgh34', 'ijkl56', 'mnop78'] 
>>> [x[:2] for x in l] 
['ab', 'ef', 'ij', 'mn'] 

更新:あなたは、あなたの関数の戻り値を格納し、彼らはどこにでもそれらをパラメータとして渡す必要がありはあなたの2番目の質問に答えるために必要:

if __name__ == "__main__": 
    L = generateSequences(15) 
    print (L) 
    S, D = generatePrefixes(4, L) 
    print (S) 
    print (D) 
+0

ありがとう。何かが私が探しているものがあるかどうかわからないので、私はまだドキュメントの中にものを見つけるのが難しいです。おそらく、私は文字列をスライスする前に前のリストを印刷することに若干の問題があるので、私が使用しているリストを生成するプログラムを見て尋ねることができますか? – grindbert

+0

また、動作していないようなランダムな部分があります。私はそれがすべての1つのプログラムだから問題を広げた。 – grindbert

+0

@grindbert:私は答えを更新しましたが、問題が互いに密接に関連していない場合は、複数の質問を作成することを検討してください。 – niemmi

関連する問題