2011-12-28 4 views
0

Я использую Python 3.0 для написания программы. В этой программе я много разбираюсь со списками, которые я не очень использовал в Python.Значения Python в списках

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

Вот код, чтобы лучше объяснить, что:

count = list.count(1) 
if count > 1 
    (This is where I would like to have it look at where the 1 is that the count is finding) 

Спасибо!

ответ

1

во-первых, я бы настоятельно рекомендуем читать через учебник для начинающих по спискам и другие структуры данных в Python: Я бы рекомендовал начать с Chapter 3 of Dive Into Python, который проходит через па с большим количеством деталей.

Чтобы найти позицию элемента в списке, у вас есть два основных варианта, как с использованием метода index. Во-первых, проверка заранее:

numbers = [2, 3, 17, 1, 42] 
if 1 in numbers: 
    index = numbers.index(1) 
    # Do something interesting 

Другой вариант заключается в поймать ValueError Брошенный index:

numbers = [2, 3, 17, 1, 42] 
try: 
    index = numbers.index(1) 
except ValueError: 
    # The number isn't here 
    pass 
else: 
    # Do something interesting 

Одно слово предостережения: избегать имен списков list: совсем в стороне от не будучи очень информативно , это будет теневое определение Python list в качестве типа, и, вероятно, это может привести к некоторым болезненным головным болям.

+0

Спасибо за эти идеи. Я пробовал использовать метод индекса раньше, но после чтения в документации о том, как он будет смотреть только на первый х в списке, я решил, что он не может быть использован для этого экземпляра. Хотя здесь, похоже, вы показали, как его можно использовать с этим номером. Кроме того, я фактически не использую список как мое имя списка, которое я только что сделал для примера. Другое дело, комментарий для второго примера, в котором говорится «# Номер здесь нет», как это было бы на самом деле написано на Python? Еще раз спасибо! – cbbcbail

+0

Я думаю, что вы, должно быть, неправильно прочитали документацию: я нигде не слышал о методе 'index', который просматривал только первые * x * элементы в списке и считал бы критическую ошибку в любой реализации Python. – FatBusinessman

+0

Что касается комментария, если он написан как комментарий, он будет написан точно так, как он появляется. Если вы имеете в виду «как бы вы выразили это в коде», это полностью зависит от контекста: оператор 'pass' просто означает« ничего не делать », что приводит к тому, что оба примера ведут себя одинаково. – FatBusinessman

0
list.index(x) 

Возвращает индекс в списке первого элемента, значение которого равно x. Это ошибка, если такой элемент отсутствует.

-

В документации вы можете найти несколько полезных функций в списках: http://docs.python.org/tutorial/datastructures.html#more-on-lists

-

Добавлено предложение после того, как Ваш комментарий: Может быть, это более полезно:

for idx, value in enumerate(your_list): 
    # `idx` will contain the index of the item and `value` will contain the value at index `idx` 
+0

Я просмотрел эту страницу в документах и ​​увидел list.index(). Но в моей программе он должен быть способен перейти на следующий, если он не может что-то сделать, и это сохранит его при первом «х» навсегда, если этот «х» не может быть изменен. – cbbcbail

+0

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

4

Проверьте документацию на sequence types и list methods.

Чтобы посмотреть на конкретный элемент в списке используется его индекс:

>>> x = [4, 2, 1, 0, 1, 2] 
>>> x[3] 
0 

Чтобы найти индекс определенного значения, используйте list.index():

>>> x.index(1) 
2 

Некоторые более подробную информацию о точно, что вы пытаетесь сделать это было бы полезно, но было бы полезно использовать list comprehension для получения индексов всех интересующих вас элементов, например:

>>> [i for i, v in enumerate(x) if v == 1] 
[2, 4] 

Вы могли бы сделать что-то вроде этого:

ones = [i for i, v in enumerate(your_list) if v == 1] 
if len(ones) > 1: 
    # each element in ones is an index in your_list where the value is 1 

Кроме того, имя переменной list это плохая идея, потому что он конфликтует с встроенным типом списка.

редактировать: В вашем примере вы используете your_list.count(1) > 1, это будет только справедливо, если есть два или более вхождения 1 в списке. Если вы просто хотите узнать, есть ли в списке 1, используйте 1 in your_list вместо list.count().

Вы можете использовать list.index(), чтобы найти элементы в списке, кроме первого, но вы должны взять кусочек списка, начиная с одного элемента после предыдущего матча, например:

your_list = [4, 2, 1, 0, 1, 2] 
i = -1 
while True: 
    try: 
     i = your_list[i+1:].index(1) + i + 1 
     print("Found 1 at index", i) 
    except ValueError: 
     break 

Этот должен дать следующий вывод:

Found 1 at index 2 
Found 1 at index 4 
+0

Я думаю, что ваш пример вводит в заблуждение, это может привести к тому, что «x [1]» - это то же самое, что «x.index (1)» –

+0

ОК, так что это отлично, но могу ли я сделать это из списка. Знаете ли вы, возможно ли даже найти тот, на который он смотрит, а не только первый, как в list.index? – cbbcbail

+0

@VincentSavard - Хороший момент, изменил пример. –

0

Вы можете узнать, в какой индекс является элементом, как это:

idx = lst.index(1) 

А затем получить доступ к элементу как это:

e = lst[idx] 

Если то, что вы хотите это следующий элемент:

n = lst[idx+1] 

Теперь вы должны быть осторожны - какой happe ns, если элемент отсутствует в списке? способ обработки этого случая:

try: 
    idx = lst.index(1) 
    n = lst[idx+1] 
except ValueError: 
    # do something if the element is not in the list 
    pass 
Смежные вопросы