2016-11-13 4 views
0

Привет, ребята Мне нужна помощь, создающая функцию, которая найдет минимальный индекс списка, который включает в себя как список строк, так и список целых чисел. Прямо сейчас я могу заставить функцию найти минимальный индекс списка целых чисел или строк, но не одновременно.поиск минимального индекса списка

def find_index_of_min(L): 
    """ 
    Parameter: a list L 
    Returns: the index of the minimum element of the list 
     (returns None if the list is empty) 
    """ 


    if L == []: 
     return None 
    elif L == str: 
     min = 'Z' 
     for i in range(len(L)): 
      if L[i] < min: 
       min = L[i] 
       min_index = i 
     return min_index 
    elif L == int: 
     min = float('inf') 
     for i in range(len(L)): 
      if L[i] < min: 
       min = L[i] 
       min_index = i 
     return min_index 

import sys 
import math 

def main(): 
    """ Read and print a file's contents. """ 

    # filename = str(input('Name of input file: ')) 
    # string = readfile(filename) 
    # print() 
    # print('The original list of cities is:') 
    # for i in range(len(string)): 
    # print(i, ':', string[i], sep="") 

    print(find_index_of_min([])) 
    print(find_index_of_min([3, 2, 1, 0])) 
    print(find_index_of_min(['A', 'Z', 'Y', 'B'])) 
    print(find_index_of_min(['B', 'A', 'Z', 'Y'])) 

main() 
+0

Слишком много работы. 'min()' существует. –

+1

'return L.index (min (L)), если L else None' –

ответ

0

Вы можете попробовать это:

Есть функция, которая проверяет, является ли элементы внутри это число или строка.

def isNumber(s): # Helper function to check if it is a Number or a string 
    try: 
     float(s) 
     return True 
    except ValueError: 
     return False 

def find_index_of_min(L): 
    """ 
    Parameter: a list L 
    Returns: the index of the minimum element of the list 
     (returns None if the list is empty) 
    """ 

    if L == []: 
     return None 
    elif isNumber(L[0]): 
     min = float('inf') 
     for i in range(len(L)): 
      if L[i] < min: 
       min = L[i] 
       min_index = i 
     return min_index 
    else: 
     min = 'Z' 
     for i in range(len(L)): 
      if L[i] < min: 
       min = L[i] 
       min_index = i 
     return min_index 


import sys 
import math 

def main(): 
    """ Read and print a file's contents. """ 

    # filename = str(input('Name of input file: ')) 
    # string = readfile(filename) 
    # print() 
    # print('The original list of cities is:') 
    # for i in range(len(string)): 
    # print(i, ':', string[i], sep="") 

    print(find_index_of_min([])) 
    print(find_index_of_min([3, 2, 1, 0])) 
    print(find_index_of_min(['A', 'Z', 'Y', 'B'])) 
    print(find_index_of_min(['B', 'A', 'Z', 'Y'])) 

main() 
1

Вы должны заменить L == int и L == str (который будет всегда оцененная Ложь) с на следующий:

all(isinstance(item, str) for item in L) # L == str 
all(isinstance(item, int) for item in L) # L == int 
Смежные вопросы