2

由于我是 python 编程的新手,所以我很难编写 python 程序。我试图在一个长列表中计算一组七个对象(?),三个数字和标签。然后我需要找出哪一组数字(以三的倍数)在列表中具有最大数量。数字由制表符分隔,数字集以七为单位。例如:

['128','130','140','145','','','','283','379','','','','','','175','183','187','','','',''etc.]

列表中的第一组数字和制表符是 128、130、140、145、制表符、制表符、制表符。列表中的第二组数字和制表符是 283、379、制表符、制表符、制表符、制表符、制表符。最后,列表中的第三组数字是 175、183、187,tab,tab,tab,tab。

我想计算七组数字和制表符中的三位数字,然后有一个最大输出数,其中一组显示最多三位数字。例如:

['128','130','140','145','','','','283','379','','','','','','175','183','187','','','','']
this first set = 4                this second set = 2        this third set = 3 

在此示例中,最终输出数字应为 4,因为第一组七个对象显示了最多的 3 位数字。这是我目前拥有的。

#!/usr/bin/env python

allele = '128   130 140 145             283 379                     175 183 187                 
elementlist=allele.split('\t')
string= str(elementlist)
type = string.replace('\t','0')

print type

我将不胜感激任何想法或疑虑。

4

2 回答 2

0

只是一个草图:

>>> L = ['128','130','140','145','','','','283','379','','','','','','175','183','187','','','','']

亚组:

>>> L1 = [L[i : i+7] for i in range(0, len(L), 7)]
>>> L1
[['128', '130', '140', '145', '', '', ''],
 ['283', '379', '', '', '', '', ''],
 ['175', '183', '187', '', '', '', '']]

子组中的元素:

>>> L2 = [sum(x.isdigit() for x in SL) for SL in L1]
>>> L2
[4, 2, 3]

最大:

>>> max(L2)
4
于 2015-12-02T08:44:43.847 回答
0

如果您只需要最长的段,您可能只想保留对最长段的起点和长度的引用,因为这样可以避免在内存中复制大量不需要的元素。这对于非常大的数据结构非常有用。在这种情况下,您可能需要使用以下内容:

def longest_segment(target_list, empty_element):
 longest_start = longest_len = 0
 current_start = current_len = 0     
 i=0          
 for element in target_list:
   if element == empty_element:
      current_start = -1
      current_len   = 0
   else:
      if(current_start == -1):
        current_start = i
      current_len = current_len + 1            
   if( current_len > longest_len ):
      longest_start = current_start
      longest_len   = current_len           
   i = i + 1                       
 return longest_start,longest_len     

使用示例:

L = ['128','130','140','145','','','','283','379',
 '','','','','','175','183','187','','','','']

#The function supports a generic empty element so you could use other separators, like tab
start, size = longest_segment(L,'') 

print ("The longest segment starts at:\t" ,start)
print ("The longest segment has length:\t",size )

#Up to this moment,  there is no need to copy or keep more elements in memory.  
print ("The longest segment is:\t", L[start:start + size])
于 2016-07-17T19:41:32.593 回答