как добавить список в Python с помощью цикла for - PullRequest
0 голосов
/ 01 ноября 2018

Я хочу добавить мой_лист

list2 = ['1','2','3','4','5']

my_list = []
for i in list2:
    my_list.append(i)

print(my_list)

Это поместит list2 в my_list.

Результат

['1', '2', '3', '4', '5']

но я хочу только значения '2' и '5')

Так что-то вроде этого:

[ '2', '5']

попробовал

for i in list2:
    my_list.append(i[1:4])

Есть идеи?

Ответы [ 5 ]

0 голосов
/ 01 ноября 2018

Самый простой и быстрый способ - использовать условный оператор для конкретного значения, которое вы ищете в цикле.

if i == 2 or i == 5:
   new_list.append(i)

Недостаток этого подхода состоит в том, что если вам нужно расширить диапазон значений, которые вы хотите получить, вам нужно будет написать самое длинное условие if i == 1 or i == 5 ... or i == N:, это не только плохо, но и плохая практика программирования, потому что код трудно поддерживать.

Лучший способ - создать список со значениями, которые вы хотите получить, и проверить, является ли этот элемент фактическим элементом, прежде чем добавлять его в новый список.

list2 = ['1','2','3','4','5']

wanted = ['2','5'] #what I search
my_list = []
for value in list2:
  if value in wanted: #when value is what a I want, append it
    my_list.append(value)

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

positions = [1,4] #indicates the positions from which I want to retrieve elements
new_list = [list[p] for p in positions] #using list comprehension for brevity

Примечание

Последнее, что я хотел бы добавить, это то, что в python вы не можете выполнить

my_list.append(i[0,4]) 

потому что python, когда смотрит на [0,4], будет интерпретировать его так, как будто вы передаете кортеж ( из-за запятой ), и выдаст следующую ошибку TypeError: list indices must be integers or slices, not tuple.

0 голосов
/ 01 ноября 2018

Может быть так

list2 = ['1','2','3','4','5']

target_idexes = [2, 5]

my_list = []
for i in list2:
    my_list.append(i) if int(i) in target_idexes else 0

print(my_list)    # ['2', '5']

или если в списке 2 не только цифры:

list2 = ['1','2','3','4','5']

target_idexes = [2, 5]

my_list = []
for i in list2:
    my_list.append(i) if list2.index(i) in target_idexes else 0

print(my_list)    # ['3'] because indexing start from 0 and 5 is out of range
0 голосов
/ 01 ноября 2018

Зависит от того, как вы решаете, какие элементы list2 следует добавить в my_list, о которых вы не упомянули:
Прямо сейчас вы можете делать то, что предложил @ MihaiAlexandru-Ionut.
или:

list2 = ['1','2','3','4','5']

my_list = []
my_list.append(list2[1])
my_list.append(list2[4])

print(my_list)

# or

my_list = []
my_list = [list2[1], list2[4], ]
print(my_list)
0 голосов
/ 01 ноября 2018

Вот короткий способ сделать это. Но будьте осторожны, хотя он сломается, если в списке есть повторяющиеся элементы.

list2 = ['1','2','3','4','5']

my_list = []

want = ['2', '5']

my_list = [list2[list2.index(i)] for i in list2 for item in want if i == item] # will fail if elements are not unique.

последняя строка эквивалентна этому

my_list = [item for i in list2 for item in want if i == item] # much better than using index method.

А вот и расширенная форма.

list2 = ['1','2','3','4','5']
my_list = []
want = ['2', '5']
for i in list2:
    for item in want:
        if i == item:
            my_list.append(list2[list2.index(i)])
            #my_list.append(item)


print(my_list)
0 голосов
/ 01 ноября 2018

Просто используйте одно условие в сочетании с list comprehension:

my_list = [item for item in list2 if item == '2' or item == '5']
...