社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
私信  •  关注

Mark

Mark 最近回复了
3 年前
回复了 Mark 创建的主题 » 特定格式的Python字典输出列表

你可以用 dict.setdefault 当第一次看到密钥时,创建一个空列表的基本子目录。然后再加上。最终结果将是 dict.values() :

vpcs = [{'ResourceOwnerId': '111111111111', 'ResourceType': 'vpc', 'ResourceId': 'vpc-aaaaa'},
        {'ResourceOwnerId': '222222222222', 'ResourceType': 'vpc', 'ResourceId': 'vpc-ccccc'},
        {'ResourceOwnerId': '111111111111', 'ResourceType': 'vpc', 'ResourceId': 'vpc-ddddd'}]

groups = {}

for d in vpcs:
    k = d['ResourceOwnerId']
    groups.setdefault(k, {'account_number':k, 'vpc':[]} )['vpc'].append(d['ResourceId'])
    
list(groups.values())

这将给你:

[{'account_number': '111111111111', 'vpc': ['vpc-aaaaa', 'vpc-ddddd']},
 {'account_number': '222222222222', 'vpc': ['vpc-ccccc']}]
3 年前
回复了 Mark 创建的主题 » 如果两个元素相邻,则在Python中拆分列表

你可以 zip() 列表本身带有偏移量以获得对。然后找到你正在寻找的一对的索引(假设这种情况发生一次,或者你只关心第一个)。然后把清单拼接起来:

test = [3,5,7,1,10,17]

def partition_on_pair(test, pair):
    index = next((i for i, n in enumerate(zip(test, test[1:])) if n == pair), len(test))
    return test[:index], test[index:]

partition_on_pair(test, (10, 17))
# ([3, 5, 7, 1], [10, 17])

partition_on_pair(test, (10, 19)) # doesn't exist, so you get an empty
#([3, 5, 7, 1, 10, 17], [])


partition_on_pair(test, (5, 7))
#([3], [5, 7, 1, 10, 17])

partition_on_pair(test, (3,5))
#([], [3, 5, 7, 1, 10, 17])
3 年前
回复了 Mark 创建的主题 » Python中异常处理中的异常

这个 Python docs 有这个:

如果在执行try子句期间发生异常,则 例外情况可以通过except子句处理。如果没有例外 由exception子句处理,在 最后条款已经执行。

因此,在您的示例中,您没有捕获内部异常,这会导致 finally 要执行的块(在重新引发原始异常之前)。中国的例外 最后 在有机会重新引发原始异常之前,将其踢到外部块。外部块从未看到被零除的异常。

这与 return 从中的函数 最后 :

def ex_test():
    try:
        try:
            1/0
        finally:
            return "finally"
    except Exception as e:
        print(e) # never gets here

ex_test()
# only prints "finally"
# never re-raises the exception

可以 获取有关原始异常的一些信息。从…起 the docs :

在exception或finally中引发(或重新引发)异常时 条款 上下文 自动设置为上次捕获的异常; 如果新的异常没有得到处理,那么最终将进行回溯 显示的将包括原始异常和最终异常 例外

所以:

try:
    try:
        1/0
    finally:
        raise Exception("Exception!")
except Exception as e:
    print(e.__context__)

# prints: "division by zero"
3 年前
回复了 Mark 创建的主题 » 如何在Python中打印绿色心形符号?

'\u1F49' 是希腊文大写字母Omicron随以Dasia: Ὁ . '\u1F49A' 是同一个角色加上一个 A 字面意义的这是因为 \u 需要16位十六进制值或4个十六进制字符。如果你想传递更大的价值,你需要使用资本 \U 并传入完整的32位十六进制值:

print('\U0001F49A')
# 💚

看到了吗 python docs 更多信息

3 年前
回复了 Mark 创建的主题 » 如何从GitLab管道向电报发送通知?

所以,我们将一步一步地讲:

  1. 创建一个电报机器人
  2. 将bot添加到电报组
  3. 查找电报组Id
  4. 通过GitLab管道发送消息

1.创建一个电报机器人

电报本身对此有足够好的指示:

https://core.telegram.org/bots#6-botfather

指令没有明确说明任何内容,但要生成指令,您必须与BotFather聊天。 最后你会得到一个机器人令牌,比如 110201543:AAHdqTcvCH1vGWJxfSeofSAs0K5PALDsaw

2.将bot添加到电报组

切换到Telegram组,并将创建的bot添加为成员(按名称查找bot)。

3.查找电报组Id

在浏览器中获取机器人的更新状态: https://api.telegram.org/bot<YourBOTToken>/getUpdates

在响应中查找聊天id: ... "chat": {"id": <YourGroupID>, ...

有关更多详细信息,请参阅: Telegram Bot - how to get a group chat id?

4.通过GitLab管道发送消息

用curl命令发送消息。例如,gitlab管道中的一个现有阶段可以为此目的进行扩展:

upload:
  stage: deploy
  image: alpine:latest
  script:
    - 'apk --no-cache add curl'
    - 'curl -X POST -H "Content-Type: application/json" -d "{\"chat_id\": \"<YourGroupID>\", \"text\": \"CI: new version was uploaded, see: https://preview.startup.com\"}" https://api.telegram.org/bot<YourBOTToken>/sendMessage '
  only:
    - main

记住要适应环境 YourBOTToken YourGroupID ,以及消息的文本。

*)我们在这里使用阿尔卑斯码头的图片,所以必须安装curl - 'apk --no-cache add curl' .对于其他图像,这可能必须以不同的方式完成。

3 年前
回复了 Mark 创建的主题 » Python列表理解:从2个列表构建一个列表

这是一个生成器表达式: (item for i in range(skills[index]) 如果你想要一个列表列表,你需要使用 [] 在理解力之内。

考虑到所需的输出,使用 zip 这两个列表并避免 range .然后嵌套理解以使其平坦:

colors = ["#F1A141", "#52D987", "#12A3FF", "#FF3F94", "#564DA6"]
skills = [3, 4, 4, 2, 3]

[c for color, n in zip(colors, skills) for c in [color] * n]

生产:

['#F1A141',
 '#F1A141',
 '#F1A141',
 '#52D987',
 '#52D987',
 '#52D987',
 '#52D987',
 '#12A3FF',
 '#12A3FF',
 '#12A3FF',
 '#12A3FF',
 '#FF3F94',
 '#FF3F94',
 '#564DA6',
 '#564DA6',
 '#564DA6']

你可以要求 next 如果9在带有 None 如果找不到:

lst = [[2,4,5,6], [0,1,3,7], [],  [8,9], [10, 11,12]]

next((l for l in lst if 9 in l), None)
# [8, 9]
3 年前
回复了 Mark 创建的主题 » 如何在Python中基于元组内容拆分列表

类似于@eshirvana,但使用defaultdict,这对于此类问题来说非常有效且常见。我会制作一个defaultdict,并根据最后一个元素确定的键保存元组列表。然后你们所有的小组都会在 values()

from collections import defaultdict

l = [(1,2,'x'), (2,3,'x'), (1,2,'z'), (2,20,'z'), (3,4,'x')]

groups = defaultdict(list)

for t in l:
    groups[t[-1]].append(t)
    
list(groups.values())
# [[(1, 2, 'x'), (2, 3, 'x'), (3, 4, 'x')], [(1, 2, 'z'), (2, 20, 'z')]]
3 年前
回复了 Mark 创建的主题 » 如何在Python中散列列表的元组

您可以将内部列表变成元组,这将使整个键不可变:

x=[[0, 0], [1, 1], [2, 0], [3, 1]]
key = tuple(tuple(l) for l in x)

y={}
y[key]=1

print('y: ',y)
# y:  {((0, 0), (1, 1), (2, 0), (3, 1)): 1}

这是个打字错误。替换 if rand not in list: lis.append(rand) 具有 if rand not in lis: lis.append(rand)

便笺列表->lis

6 年前
回复了 Mark 创建的主题 » 在python中删除多维数组中的重复值

也许不是最短的,但像这样的东西会起作用:

arrs = [
[125.25,129,128,129],
[124.25,127,130,131],
[126,126,125,124],
[126,124,130,124]
]

alreadyExisting = []
removedDuplicatesArr = []

for arr in arrs:
    newArr = []
    for i in arr:
        if i not in alreadyExisting:
            alreadyExisting.append(i)
            newArr.append(i)
    if newArr:
        removedDuplicatesArr.append(newArr)

print(removedDuplicatesArr)

您可以使用字符类来匹配数字,如下所示 [0-9] .如果你把他们两个放在一起,你会匹配00-99。如果你把 ? 在其中一个之后,它是可选的,所以你将匹配0-99。要强制1-99,请将非可选设置为如下 [1-9] .最后,您需要确保在使用^的一个或两个数字之前或之后没有任何内容,它与字符串的开头匹配,$与结尾匹配。

if (category.match(/^[1-9][0-9]?$/)){
    console.log("ok")
} else {
    console.log("not ok")
}

建议:

如果你想在一个单独的环境中漫步,你应该选择一些类似流浪者的东西。

如果您打算使用Docker,请尝试这种方法。
您可以将任何代码放在Ruby文件中,无论您想放什么。

$ docker run -it -v $(pwd)/:/data ruby:2.5 ruby -- /data/hello.rb
  hello world!

Perl -有趣的是之前有这么多答案