鱼C论坛

 找回密码
 立即注册
查看: 1483|回复: 11

[已解决]随机将一字符串/列表的元素移到另一对象中后

[复制链接]
发表于 2022-6-15 16:38:10 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 12345ab 于 2022-6-16 17:20 编辑

例子:

a,b= 'abc','123'
move(a,b)
print(a,b)

输出可以是:  ab 123c
(a的随机一个字元移到b尾部)

例子2:
a,b= ['apple,'banana','car'],['dog','egg','fun']
move(a.b)
print(a,b)

输出可以是:
['banana','car'] ['dog','egg','fun','apple']
(a的一个元素移到b列表尾部)

我写的代码:(并不能达到标题的要求)
import random
def move(a,b)
        rand = int(random.random()*len(a))
        b += a[rand]   
        del a[rand]

但是我发现(以例子2为例)当a和b的类型是列表时 .
a[rand]的类型是并不是列表,
于是导致了 b += a[rand]最后的结果是
['dog','egg','fun','a','p','p','l','e']

我也曾想过使用pop()方法但这一方法却又不兼容str类型
难道就没有一个能同时兼容字符串和列表的方法么
最佳答案
2022-6-16 17:26:26
12345ab 发表于 2022-6-16 17:18
感谢指正 我当时忽略了元组字典这些类型了
准确来说只需要兼容列表和字符串就行了

用type探测类型,然后建立两个分支
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2022-6-15 16:38:56 | 显示全部楼层
希望我有将我的意思表达清楚
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-6-15 17:10:13 From FishC Mobile | 显示全部楼层
你确定你的函数能实现例子1的结果?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-6-15 17:16:21 From FishC Mobile | 显示全部楼层
import random

def move(a, b):
    b.append(a.pop(random.randint(0,len(a)-1)))

# 仅限 ab 都是列表
a,b= ['apple', 'banana','car'],['dog','egg','fun']
move(a, b)
print(a,b)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-6-15 17:17:51 From FishC Mobile | 显示全部楼层
hrpzcf 发表于 2022-6-15 17:16

它的意思是用一个函数可以实现任意类型的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-6-15 17:50:02 From FishC Mobile | 显示全部楼层
wp231957 发表于 2022-6-15 17:17
它的意思是用一个函数可以实现任意类型的


那只能给函数加返回值了,要是a, b类型不同的的话那就更复杂了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-6-15 22:50:32 | 显示全部楼层
不符合逻辑,比如 tuple 类型是不可改类型(只能换新对象)但都是可迭代。

Python 虽然很多很简化操作方法,但由于太简化,导致一些代码想自行更改其构造或者自定义构造反而变得非常困难。C++ 的重载或 C 的空指针完美解决这种问题。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-6-16 17:18:01 | 显示全部楼层
傻眼貓咪 发表于 2022-6-15 22:50
不符合逻辑,比如 tuple 类型是不可改类型(只能换新对象)但都是可迭代。

Python 虽然很多很简化操作方 ...


感谢指正 我当时忽略了元组字典这些类型了
准确来说只需要兼容列表和字符串就行了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-6-16 17:26:26 From FishC Mobile | 显示全部楼层    本楼为最佳答案   
12345ab 发表于 2022-6-16 17:18
感谢指正 我当时忽略了元组字典这些类型了
准确来说只需要兼容列表和字符串就行了

用type探测类型,然后建立两个分支
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-6-16 17:30:03 | 显示全部楼层
wp231957 发表于 2022-6-16 17:26
用type探测类型,然后建立两个分支

好主意
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-6-16 17:37:41 | 显示全部楼层
12345ab 发表于 2022-6-16 17:18
感谢指正 我当时忽略了元组字典这些类型了
准确来说只需要兼容列表和字符串就行了

from random import randint

def foo(A, B):
    n = randint(0, len(A) - 1)
    if type(A) == str:
        X = ''.join([c for i, c in enumerate(A) if i != n])
        Y = B + A[n]
        return X, Y
    B += [A[n]]
    A.pop(n)
    return A, B

a = "banana"
b = "flower"
a, b = foo(a, b)
print(a, b)

# -------------------

c = ['a', 'b', 'c']
d = [1, 2, 3, 4, 5]
c, d = foo(c, d)
print(c, d)
banna flowera
['b', 'c'] [1, 2, 3, 4, 5, 'a']
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

 楼主| 发表于 2022-6-16 18:02:06 | 显示全部楼层

十分感谢
你这比我写的那段简洁多了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-11-17 21:42

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表