2013-05-17 3 views
2

Я написал очень простую функцию в Python, которая печатает все простые числа в определенной последовательности.Python: Удаление ненужных скобок?

Он отлично работает, но результаты, которые он дает мне, имеют слишком много скобок/скобок в них. Я хотел бы получить результат как один вывод с одним списком, включая все числа, а не с множеством выходов, каждый из которых содержит один номер.

Вот код:

def prime_list(X, Y): 
    Z = 0 
    while X <= Y: 
     if is_prime(X): 
      Z = Z, X 
     X = X + 1 
    print (Z) 

Функция is_prime() используется в коде просто возвращает True, если число является простым числом, и False, если это не так.

В принципе, для каждого цикла он проверяет, является ли X простым числом. Если это так, то X будет добавлен в список под названием Z. Хотя, когда он делает это, он также добавляет ненужные скобки/скобки в список. Вот результат, используя последовательность 1-100:

>>> prime_list(1,100) 
(((((((((((((((((((((((((0, 2), 3), 5), 7), 11), 13), 17), 19), 23), 29), 31), 37), 41), 43), 47), 53), 59), 61), 67), 71), 73), 79), 83), 89), 97) 

Как вы можете видеть, есть слишком много скобки/круглые скобки.

Как я могу переписать код, чтобы он не делал их?

+0

Как примечание, говорящее о ненужных скобках: вы не хотите 'print (Z)'. Если это Python 2.x, просто сделайте 'print Z'. Если это 3.x, 'print' - вызов функции, как' is_prime', так что 'print (Z)'. – abarnert

+0

Что еще более важно, вы, вероятно, хотите «вернуть Z» в любом случае, а не 'print Z'. Это означает, что вы можете написать код, который вызывает 'prime_list' и что-то делает с результирующим списком, кроме того, что он просто распечатывает его и отбрасывает. – abarnert

+0

@abarnert Спасибо, хорошие моменты. Я не привык работать со списками, поэтому, полагаю, поэтому я сделал это 'print', а не' return' – kongehund

ответ

5

Просто добавьте в список вместо гнездовых кортежей:

def prime_list(X, Y): 
    Z = [] 
    while X <= Y: 
     if is_prime(X): 
      Z.append(X) 
     X = X + 1 
    return Z 
+0

Спасибо, это сработало. Однако я новичок в Python, поэтому я не совсем понимаю, как работают списки и .append. – kongehund

+0

@kongehund: прочитали ли вы [учебник] (http://docs.python.org/3/tutorial/introduction. HTML # списки)? Или сторонний учебник?(Официальный - не тот, кто дружелюбен к новичкам, хотя это _great_, если вы эксперт C с опытом работы с perl, Self, Haskell и Icon ...) – abarnert

+0

@abarnert * * отлично * если вы знаете какой-либо другой язык программирования , почему вы должны быть экспертом в C и знать perl, Self, Haskell и Icon? Я хорошо узнал из официального учебника, зная ничего, кроме Lua :) –

3

Не прямой ответ, но здесь чище и более короткий путь:

def prime_list(X, Y): 
    return [ x for x in range(X, Y+1) if is_prime(x) ] 
0

Вы также можете сцепить кортежи (обратите внимание на завершающую запятая при добавлении к Z):

def prime_list(X, Y): 
    Z =() 
    while X <= Y: 
     if is_prime(X): 
      Z += X, 
     X = X + 1 
    print (Z) 

Не уверен, что более эффективный: добавление к списку или конкатенация кортежей ...

+0

Это ошибка типа ('Z = 0; Z + = 1,'). – delnan

+3

Добавление к списку будет более эффективным (потому что оно на месте, тогда как конкатенация кортежей каждый раз создает новые кортежи), но главная проблема, с которой я сталкиваюсь, заключается в том, что функция называется 'prime_list'; это подразумевает возврат списка. – Cairnarvon

+0

Спасибо @Cairnarvon! – janos

0

В строке «z = z, x» вы сделали, чтобы назначить z список, содержащий z и x. После первого раза z всегда будет списком, когда вы приедете сюда, чтобы получить новый список, содержащий старый список и целое число. Итак, z = 0 в начале, затем 0, 1 далее, а затем он овальный ... В следующий раз он становится (0, 1), 2; предыдущий список (старый z) и новый x. В следующий раз вы получите ((0, 1), 2), 3 и так далее.

Если вы используете z.append (x), он добавляет дополнительный элемент в список, а не каждый раз создает новый список из 2 элементов. Используя z.append (x), в конце вы получите (0, 1, 2, 3, ...), что ближе к тому, что вы думали, что получите.

Смежные вопросы