这是一个bash解决方案.:)
bash$ perl -CSD -ne 'BEGIN { $s{$_}++ for split //, q(!@#.) }
$s{$_}++ || $c++ for split //;
END { print "$c\n" }' *.utf8
Run Code Online (Sandbox Code Playgroud)
在Python中:
import itertools, codecs
predicate = set('!@#.').__contains__
unique_char_count = len(set(itertools.ifilterfalse(
predicate, itertools.chain.from_iterable(codecs.open(filename, encoding="UTF-8")))))
Run Code Online (Sandbox Code Playgroud)
当您遍历文件时,您会获得行.chain
将它们连接在一起,所以迭代它就可以得到字符.ifilterfalse
消除符合条件的字符,条件定义为一组不允许字符的成员资格.
没有itertools:
import codecs
disallowed = set('!@#.')
unique_char_count = len(set(char for line in codecs.open(filename, encoding="UTF-8") for char in line
if char not in disallowed))
Run Code Online (Sandbox Code Playgroud)
使用set操作:
import codecs
unique = set()
any(unique.update(line) for line in codecs.open(filename, encoding="UTF-8"))
unique.difference_update('!@#.')
unique_char_count = len(unique)
Run Code Online (Sandbox Code Playgroud)
使用 Perl 一行代码:
\n\necho -e "aba\\ncfg!\xe0\xb4\xa1.#g" | perl -C7 -ne \'for(split(//)){if ($_ !~ /[!@#.]/) { print $_."\\n"}}\' | sort | uniq | wc -l\n
Run Code Online (Sandbox Code Playgroud)\n\n输出 7
如果你想忽略换行符:
\n\necho -e "aba\\ncfg!\xe0\xb4\xa1.#g" | perl -C7 -ne \'for(split(//)){if ($_ !~ /[!@#.\\n]/) { print $_."\\n"}}\' | sort | uniq | wc -l\n
Run Code Online (Sandbox Code Playgroud)\n\n输出 6
归档时间: |
|
查看次数: |
2486 次 |
最近记录: |