2016-06-01 128 views
0

我有一個字符串列表,我想從每個字符串(列表條目)中選擇特定數量的字符。我發現了一些關於切分字符串的知識,但我不知道如何使它與列表一起工作。此外,我不知道這是否是一種方法。 例子: 我有一個列表從列表條目中選擇x(f.e. first)字符,然後從新列表中選擇隨機條目

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

,我想提取每串('ab', 'ef', 'ij', 'mn')的前兩個字符,並把它們放在另一個列表。 任何幫助表示讚賞。

編輯: 它現在可以工作,但我在切片之前無法打印列表。下面是完整的代碼(隨機部分似乎並沒有工作,以及):

#!/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) 

它打印很好,沒有問題,但告訴我,L沒有定義。奇怪的是,它顯示S爲undefined,但它仍然有效。 另外我似乎無法得到我選擇隨機條目工作的部分。 D根本沒有出現。

回答

2

你可以用字符切片結合list comprehension,你會得到如下:

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

更新:要回答你的第二個問題,你需要存儲你的函數返回值和他們無處不在作爲參數傳遞它們需要:

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

非常感謝。我仍然無法找到文件中的內容,因爲我不知道是否有什麼是我正在尋找的東西。我是否可以請求你查看生成我正在使用的列表的程序,因爲在切分字符串之前打印先前的列表有一些小問題。 – grindbert

+0

還有一個似乎不起作用的隨機部分。由於這只是一個程序,所以我擴展了這個問題。 – grindbert

+0

@grindbert:我更新了答案,但在將來請考慮創建多個問題以防問題彼此之間不密切相關 – niemmi