Как проверить, есть ли последовательность целых чисел в списке - PullRequest
2 голосов
/ 06 апреля 2019

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

li = [1, 2, 6, 'h', 'y', 'h', 'y', 4]

должен остановиться, когда

li = [all elements type are strings]
li = [1, 2, 6, 'h', 'y', 'h', 'y', 4]

while '''there are still numbers in the list''':
    #code keeps on executing and updating li[] with string input
else:
    # output the list with no numbers

Это то, что я пробовал, но если элемент first[0] и and last[7] становится строкой, цикл while переходит к последнему условию else, даже если в списке присутствует тип int. если сделать последовательно, он работает нормально.

li = [8, 2, 6, 'h', 'y', 'h', 'y', 4]

for a in li:
    while a in li:
        if type(a) == int:
            x = int(input('Position: '))
            entry = input('Enter: ')
            li.pop(x)
            li.insert(x, entry)
            print(li) # to see what's happening
            li = li
    else:
        print('Board is full')

print(li)

Но я не хочу этого последовательно.
Следовательно, это должно продолжаться, если

li = [c, 2, 6, 'h', 'y', 'h', 'y', f]

и остановка, когда

li = [a, b, c, 'h', 'y', 'h', 'y', d]

все строки

Ответы [ 4 ]

1 голос
/ 06 апреля 2019

Вы можете использовать all или any в сочетании с string.isnumeric(), чтобы проверить это

li = ['a', 1, 2]
while any(str(ele).isnumeric() for ele in li):
    modify li ...
0 голосов
/ 08 апреля 2019

Гекконы дали мне подсказку.Спасибо за это.Я обнаружил, что использование isinstance с любым () решает проблему

li = ['a', 1, 2]
while any(isinstance(element, int) for element in li):
       #code goes here...
0 голосов
/ 06 апреля 2019

Я думаю, вы можете сделать это:

li = [1, 2, 3, h, y, 5, g, 3]
length = len(li)
while count != length:
    for row in li:
    if type(row) == int:
        li.pop(row)
        count += 1
0 голосов
/ 06 апреля 2019

Возможно решение, о котором вы просили.Но один совет при написании на python - избегать явной проверки типов (type (a) == int).ниже приведено простое решение.

import string
import random
letter = random.choice(string.ascii_letters) #swapping data
xe = [8, 2, 6, 'h', 'y', 'h', 'y', 4]
for i in range(len(xe)):
    try:
        xe[i].upper()
    except:
        xe.pop(i)
        xe.insert(i,letter)
print(xe)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...