2010-02-24 26 views
5

Tôi đang cố gắng tạo một danh sách các codon có thể cho một chuỗi protein.Làm việc với itertools.product và các danh sách trong python 3

Về cơ bản, tập lệnh tôi đang cố gắng tạo sẽ xử lý chuỗi đầu vào đã cho và xuất ra một kết hợp có thể có của một bộ chuỗi khác mà đầu vào đại diện. Ví dụ: ký tự 'F' đại diện cho 'UUU' hoặc 'UUC'; ký tự 'Tôi' đại diện cho 'AUU', 'AUC' hoặc 'AUA'.

Với đầu vào 'FI', tập lệnh tôi đang cố gắng tạo nên: 'UUUAUU', 'UUUAUC', 'UUUAUA', 'UUCAUU', 'UUCAUC' và 'UUCAUA'.

tôi đang mắc kẹt với mã này:

import itertools 

F = ['UUU', 'UUC'] 
I = ['AUU', 'AUC', 'AUA'] 

seq, pool = 'FI', [] 

for i in seq: 
    pool.append(eval(i)) 

for n in itertools.product(pool): 
    print(n) 

Nó hoạt động khi tôi thay pool trong itertools.product với pool[0], pool[1]. Nhưng tôi không thể tìm ra cách làm cho nó hoạt động để người dùng có thể nhập một chuỗi có nhiều hơn 2 ký tự (tức là không làm cho nó được mã hóa cứng).

Cảm ơn bạn đã trợ giúp!

Trả lời

6

Bạn có thể sử dụng *pool để "giải nén" danh sách khi gọi product():

for n in itertools.product(*pool): 
    print(n) 

cú pháp này mở rộng danh sách pool vào tham số vị trí riêng biệt.

2

itertools.product (hồ bơi [0], hồ bơi [1], ... hồ bơi [len (pool) -1]) tương đương với itertools.product (* pool)

import itertools 

F = ['UUU', 'UUC'] 
I = ['AUU', 'AUC', 'AUA'] 

pool=[F,I] 

for n in itertools.product(*pool): 
    print(''.join(n)) 
Các vấn đề liên quan