【问题标题】:How to make a list of lists using position specific elements from original list in Python?如何使用 Python 中原始列表中的位置特定元素制作列表列表?
【发布时间】:2017-03-13 02:51:04
【问题描述】:

我需要读取 sp_list1 以使每个列表中相应位置的三个元素都在一个列表中。接下来的三个(不重叠的)被放入一个单独的列表中,这样一个就可以列出一个列表。

Input: seq_list1 = ['ATGCTATCATTA','ATGCTATCATTA','ATGCTATCATTT']

期望的输出

seq_list_list1 =[['ATG','ATG','ATG'],['CTA','CTA','CTA'],['TCA','TCA','TCA'],['TTA','TTA','TTT']]

我觉得这应该可以使用列表推导之类的东西来实现,但我无法弄清楚(特别是,我无法弄清楚如何访问一个项目的索引,以便一个人选择三个连续的索引使用列表推导时不重叠)。

【问题讨论】:

  • 你一定已经意识到append 需要一个参数。为什么不提供?
  • 那是我不确定的一部分。我是否只是放了一个空列表,就像我在其中进行了编辑一样?
  • 附加空列表是没用的 - 也许append(x) 或类似的东西可能有用,但它仍然需要一些其他的工作。
  • @TigerhawkT3 哎哟!最近,每当我寻求提出疑问时。我总是尝试自己编写代码,因为我对语法和一些逻辑转换为 Python 没有很好的把握。我从未将 SO 用作“编码服务”,但总是试图从答案中学习。话虽如此,我将删除问题的第一部分,并将其作为一个单独的部分提出,因为它与标题无关。
  • 对不起,我不是故意的——除非它激励你学习更多。 :) 学习,完善您对程序应该做什么的想法,并继续尝试。

标签: python list position sublist


【解决方案1】:

您可以在这里使用此代码,您可以根据自己的需要对其进行操作。希望对你有帮助:

seq_list1 = ['ATGCTATCATTA','ATGCTATCATTA','ATGCTATCATTT']
n=3

seq_list1_empty=[]
counter = 0

for k in range(len(seq_list1)+1):
    for j in seq_list1:
        seq_list1_empty.append([j[i:i+n] for i in range(0, len(j), n)][counter])# this will reassemble the string as an index
    counter+=1

counter1=0
counter2=3
final_dic=[]
for i in range(4):
    final_dic.append(seq_list1_empty[counter1:counter2])#you access the first index and the third index here
    counter1+=3
    counter2+=3
print final_dic

输出是

[['ATG', 'ATG', 'ATG'], ['CTA', 'CTA', 'CTA'], ['TCA', 'TCA', 'TCA'], ['TTA', 'TTA', 'TTT']]

【讨论】:

  • 1) 您正在为某人工作,而 SO 不是编码服务。 2) 输出甚至都不正确。
  • 我想在这里提供帮助。我仍在检查输出 PRO :D
  • 由于@TigerhawkT3 已经提到过,我投了反对票。做OP的作业不会帮助他学习。如果你这样做了,我很抱歉,但我仍然看不到你的代码的解释。如果您在回答之前先问自己以下问题是否有帮助:我的回答是否以及如何帮助未来的用户。如果您无法对上述问题给出肯定的回答,最好不要发布答案。
  • 我无法理解我当前的问题与stackoverflow.com/questions/18449360/…stackoverflow.com/questions/6632188/… 的问题有何不同。为什么这些问题得到了广泛的支持或回答,他们的问题和我的有什么区别?(2/2)
  • 另外,@TigerhawkT3 我并不是要把你扔到公共汽车下,但是一位 OP 在stackoverflow.com/questions/40326582/… 上问了一个类似于我的措辞的问题,没有询问原因/解释或其他任何东西.我注意到您也回复了同样的内容,但我不明白或不明白您为什么回复了该 OP 并且没有向他询问尝试的代码或告诉他您刚刚告诉我的内容?
【解决方案2】:
seq_list1 = ['ATGCTATCATTA','ATGCTATCATTA','ATGCTATCATTT']


def new_string(string, cut):
    string_list = list(string) # turn string into list

    # create new list by appending characters from from index specified by
    # cut variable
    new_string_list = [string_list[i] for i in range(cut, len(string_list))]

    # join list characters into a string again
    new_string = "".join(new_string_list)

    # return new string
    return new_string


new_sequence = [] # new main sequence

# first for loop is for getting the 3 sets of numbers
for i in range(4):
    sub_seq = [] # contains sub sequence

    # second for loop ensures all three sets have there sub_sets added to the
    #sub sequence
    for set in range(3):
        new_set = seq_list1[set][0:3] #create new_set
        sub_seq.append(new_set) # append new_set into sub_sequence


    #checks if sub_seq has three sub_sets withing it, if so
    if len(sub_seq) == 3:
        #the first three sub_sets in seq_list1 sets are removed
        for i in range(3):
            # new_string function removes parts of strings and returns a new
            # string look at function above

            new_set = new_string(seq_list1[i], 3) # sub_set removed
            seq_list1[i] = new_set # new set assigned to seq_list1

    # new_sub sequence is added to new_sequence
    new_sequence.append(sub_seq)

    #sub_seq is errased for next sub_sequence
    sub_seq = []


print(new_sequence)

试试这个。很抱歉,如果它难以理解,不是很精通文档。

【讨论】:

    猜你喜欢
    • 2011-12-16
    • 1970-01-01
    • 2018-10-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-05-06
    • 1970-01-01
    • 2019-05-31
    相关资源
    最近更新 更多