翻译了前边一点的脚本,可以加深对python基础理解和应用
github原址:https://github.com/30-seconds/30-seconds-of-python/tree/master/snippets
1.检测是否所有元素是否相同:使用list的切片操作:[1:]和[-1:]
def all_equal(lst):
print(lst[1:]) #从1开始是为了保证元素个数相同
print(lst[:-1])
return lst[1:] == lst[:-1]
print(all_equal([1, 1, 1, 1]))
print(all_equal([1,2,2,4]))
输出结果:
[1, 1, 1]
[1]
True
[2, 2, 4]
[4]
False
2.检测每个元素是否唯一:set函数去除重复的,如果有重复的,必然长度有所变化,比较长度就知道是不是唯一了。
def all_unique(lst):
return len(lst) == len(set(lst))
x = [1,2,3,4,5,6]
y = [1,2,2,3,4,5]
all_unique(x) # True
all_unique(y) # False
3.求平均值:使用sum求和,再用长度求个数,算出平均值。
def average(*args):
return sum(args, 0.0) / len(args)
average(*[1, 2, 3]) # 2.0
average(1, 2, 3) # 2.0
4.新款求平均值:map():进行映射,即fn的函数功能映射到后边的list中,lambda情看我其他文章。Lambda的内容可以改的。
def average_by(lst, fn=lambda x: x):
return sum(map(fn, lst), 0.0) / len(lst)
average_by([{ 'n': 4 }, { 'n': 2 }, { 'n': 8 }, { 'n': 6 }], lambda x: x['n']) # 5.0
5.对错分类:根据对应位置的filter提供的rue或false,将其分类。
Enumerate为每个元素创建索引,在循环中i是索引,x是对应位置的元素。
def bifurcate(lst, filter):
return [
[x for i,x in enumerate(lst) if filter[i] == True],
[x for i,x in enumerate(lst) if filter[i] == False]
]
bifurcate(['beep', 'boop', 'foo', 'bar'], [True, True, False, True]) # [ ['beep', 'boop', 'bar'], ['foo'] ]
6. 新款对错分类
def bifurcate_by(lst, fn):
return [
[x for x in lst if fn(x)],
[x for x in lst if not fn(x)]
]
bifurcate_by(['beep', 'boop', 'foo', 'bar'], lambda x: x[0] == 'b') # [ ['beep', 'boop', 'bar'], ['foo'] ]
7.返回字符串长度
def byte_size(s):
return len(s.encode('utf-8'))
byte_size('😀') # 4
byte_size('Hello World') # 11
8.改字符串:每个单词之间的空格、_、—被取代。
Re.sub(substitute(替换))---正则表达式的应用,替换。Title():单词首个字母大写。还有replace函数,不多说。
import re
def camel(s):
s = re.sub(r"(_|-)+", " ", s).title().replace(" ", "")
return s[0].lower() + s[1:]
camel('some_database_field_name'); # 'someDatabaseFieldName'
camel('Some label that needs to be camelized'); # 'someLabelThatNeedsToBeCamelized'
camel('some-javascript-property'); # 'someJavascriptProperty'
camel('some-mixed_string with spaces_underscores-and-hyphens'); # 'someMixedStringWithSpacesUnderscoresAndHyphens'
9.大写单词首字母:可调整lower_rest使得剩余小写
def capitalize(s, lower_rest=False):
return s[:1].upper() + (s[1:].lower() if lower_rest else s[1:])
capitalize('fooBar') # 'FooBar'
capitalize('fooBar', True) # 'Foobar'
10.每个单词大写首字母
def capitalize_every_word(s):
return s.title()
capitalize_every_word('hello world!') # 'Hello World!'