Форум сайта python.su
2
всем привет
существует ли какой-то более простой и быстрый способ кроме ISALNUM() в цикле?
k = "asd&1 %/(KH-092 D?X" x = "" for m in k: if m.isalnum(): x = x + m print(x)
Отредактировано gtlhbkkj (Окт. 6, 2019 15:10:06)
Офлайн
через регулярки можно
>>> import re >>> k = "asd&1 %/(KH-092 D?X" >>> re.sub(r'[^a-zA-Z0-9]+','',k) 'asd1KH092DX'
>>> patt = re.compile('[^a-zA-Z0-9]+') >>> re.sub(patt,'',k) 'asd1KH092DX'
Отредактировано vic57 (Окт. 6, 2019 16:44:23)
Офлайн
2
vic57спасибо
через регулярки можно
Офлайн
857
Быстрый не быстрый, а твой цикл не по-питоновски сделан
>>> s = 'asd&1 %/(KH-092 D?X' >>> ''.join(filter(str.isalnum, s)) 'asd1KH092DX' >>>
Офлайн
2
py.user.nextблагодарю
Быстрый не быстрый, а твой цикл не по-питоновски сделан
Офлайн
gtlhbkkjможно С/С++ применить, но кодировка должна быть однобайтовой типа cp1251
ваш вариант исполняется на 20% дольше )))
//find_ascii.c
#include <stdio.h>
#include <string.h>
int main(int argc, char** argv) {
const char* arr = argv[1];
for (int i = 0; i < strlen(arr); i ++) {
unsigned int tmp = arr[i];
if ((tmp > 47 && tmp < 58) || (tmp > 64 && tmp < 91) || (tmp > 96 && tmp < 123 ) || (tmp > 191)) {
fprintf(stdout,"%c",tmp);
}
}
fprintf(stdout,"\n");
}
from subprocess import run,PIPE s = 'asd&1 %/(KH-092 D?X' cmd = ["./find_ascii",s.encode('cp1251')] p = run(cmd,stdout=PIPE) print (p.stdout.decode('cp1251'))
Офлайн
2
vic57спасибо и на том
можно С/С++ применить, но кодировка должна быть однобайтовой типа cp1251
Отредактировано gtlhbkkj (Окт. 7, 2019 00:20:35)
Офлайн
857
vic57Код ужасный, конечно, во всех смыслах.
можно С/С++ применить
Там в C89 есть функция isalnum(), декларируется она в ctype.h .vic57fprintf(stdout,"%c",tmp);
putchar(tmp);
Отредактировано py.user.next (Окт. 7, 2019 04:30:20)
Офлайн
py.user.nextпосмотри ctypes и увидишь что она именно коды символов анализирует и только для ascii
Там в C89 есть функция isalnum(), декларируется она в ctype.h .
py.user.nextмне твое мнение неинтересно от слова совсем, прохвессор
Код ужасный, конечно, во всех смысла
Офлайн
857
vic57Там и для Юникода функция есть. Просто ты в C полный ноль, если вообще не отрицательное число.
посмотри ctypes и увидишь что она именно коды символов анализирует и только для ascii
vic57Это оттого, что ты прилюдно обосрался, когда захотел сумничать.
мне твое мнение неинтересно от слова совсем, прохвессор
vic57Это говнокодище.//find_ascii.c
#include <stdio.h>
#include <string.h>
int main(int argc, char** argv) {
const char* arr = argv[1];
for (int i = 0; i < strlen(arr); i ++) {
unsigned int tmp = arr[i];
if ((tmp > 47 && tmp < 58) || (tmp > 64 && tmp < 91) || (tmp > 96 && tmp < 123 ) || (tmp > 191)) {
fprintf(stdout,"%c",tmp);
}
}
fprintf(stdout,"\n");
}
arr[-1], arr[-2]
Отредактировано py.user.next (Окт. 7, 2019 21:37:50)
Офлайн